美文网首页
js变量声明

js变量声明

作者: Viewwei | 来源:发表于2020-10-21 19:00 被阅读0次

    var声明作用域

    var 操作符定义的变量会成为包含它的函数局部变量,如果在一个函数内定义var,那么这个变量的作用域就是在函数里面,函数退出的时候,变量会被销毁,不过如果在函数中省略var,那么这个变量就算是全局变量,var声明的变量可以用window访问到

    ```

      function test() {

        var message = "hi"

    }

    test()

    console.log(message)  //出错

    ```

    ```

    function test() {

       message = "hi"

    }

    test()

    console.log(message)  //输出为hi

    ```

    var 声明提升

    ```

    function test() {

        console.log(age) //不出出错,而是显示undefined,变量得到提升

        age =26

    }

    test()

    ```

    let声明

    let 声明的变量是块作用域,所谓块作用域的描述就像是变量声明在函数内部,那么这个变量的作用域只在函数中,在函数在访问这个变量就会报错,let声明的变量也不存在变量提升。let声明的变量不会被window中访问到

    let声明变量和var声明变量的区别

    ```

    for(var i = 0;i <10; i++) {

        setTimeout(() => console.log(i),0)

    }

    ```

    代码输出的结果都是10

    ```

    for(let i = 0;i <10; i++) {

    setTimeout(() => console.log(i),0)

    }

    ```

    代码输出的结果都是1-10

    解释原因:在var变量中,迭代变量保存的导致循环退出的值是5,在10次之后,所以的i都是同一个变量,因此输出都是同一个最终值,而let声明迭代变量的时候,javascript在后台会为每个迭代循环声明一个新的迭代变量,所以输出了1-10的值

    const 变量

    const修饰的变量和let一样,都是块级作用域,唯一不同的是const变量必须初始化,初始化之后不能够修改。const修饰的对象,可以添加属性,如果不想修改属性,可以使用

    Object.freeze({})创建const对象,这样的对象是不能被修改的,哪怕是属性

    声明风格和最佳实践

    优先使用const>let>var

    相关文章

      网友评论

          本文标题:js变量声明

          本文链接:https://www.haomeiwen.com/subject/uzvemktx.html