美文网首页
ES6中的let

ES6中的let

作者: 望夜的星空 | 来源:发表于2017-09-14 22:28 被阅读0次

        let实际上为 JavaScript 新增了块级作用域。

    function f1() {

      let n = 5;

      if (true) {

        let n = 10;

      }

      console.log(n); // 5

    }

    函数有两个代码块,都声明了变量n,运行后输出5。这表示外层代码块不受内层代码块的影响。如果两次都使用var定义变量n,最后输出的值才是10。

    ES6 允许块级作用域的任意嵌套。

    {{{{{let insane = 'Hello World'}}}}};


    es6的const和let

                  const 命令               

    const声明一个只读的常量。一旦声明,常量的值就不能改变。

    如范文:

    const PI = 3.1415;

    PI // 3.1415

    PI = 3;

    // TypeError: Assignment to constant variable.

    上面代码表明改变常量的值会报错。

    const声明的变量不得改变值,这意味着,const一旦声明变量,就必须立即初始化,不能留到以后赋值。

    const的作用域与let命令相同:只在声明所在的块级作用域内有效。

                        const的本质

    const实际上保证的,并不是变量的值不得改动,而是变量指向的那个内存地址不得改动。对于简单类型的数据(数值、字符串、布尔值),值就保存在变量指向的那个内存地址,因此等同于常量。但对于复合类型的数据(主要是对象和数组),变量指向的内存地址,保存的只是一个指针,const只能保证这个指针是固定的,至于它指向的数据结构是不是可变的,就完全不能控制了。因此,将一个对象声明为常量必须非常小心。

    const foo = {};

    // 为 foo 添加一个属性,可以成功

    foo.prop = 123;

    foo.prop // 123

    // 将 foo 指向另一个对象,就会报错

    foo = {}; // TypeError: "foo" is read-only

    上面代码中,常量foo储存的是一个地址,这个地址指向一个对象。不可变的只是这个地址,即不能把foo指向另一个地址,但对象本身是可变的,所以依然可以为其添加新属性。

    相关文章

      网友评论

          本文标题:ES6中的let

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