美文网首页
let 和 const命令

let 和 const命令

作者: Jason_Shu | 来源:发表于2019-01-13 22:31 被阅读0次

    一. let命令

    (1)不存在「变量提升」
    var命令存在「变量提升」。

    console.log(a);  //  undefined
    var a = 1;
    

    上面代码等价于

    var a;
    console.log(a);  //  undefined
    a = 1;
    

    如果使用let

    console.log(a);  //  a is not defined
    let a = 1;
    

    (2)暂时性死区
    只要块级作用域内存在let命令,它所声明的变量就“绑定”(binding)这个区域,不再受外部的影响。

    var tmp = 123;
    
    if (true) {
      tmp = 'abc'; // ReferenceError
      let tmp;
    }
    

    上面代码中,存在全局变量tmp,但是块级作用域内let又声明了一个局部变量tmp,导致后者绑定这个块级作用域,所以在let声明变量前,对tmp赋值会报错。

    总结:「就是在块级作用域内,使用let命令声明变量前,该变量不可使用」。

    二. const命令

    「const」命令声明一个只读的常量。

    本质:
    「const」实际上保证的,并不是变量的值不得改动,而是变量指向的那个内存地址所保存的数据不得改动。
    对于「简单数据类型」(Number,String,Boolean),值就保存在变量指向的那个内存地址,因此等同于常量。
    而对于「复杂数据类型」(主要是指数组和对象),变量指向的内存地址,保存的只是一个指向实际数据的指针,const只能保证这个指针是固定的(即总是指向另一个固定的地址),至于它指向的数据结构是不是可变的,就完全不能控制了。

    比如:

    const foo = {};
    
    // 为 foo 添加一个属性,可以成功
    foo.prop = 123;
    foo.prop // 123
    
    // 将 foo 指向另一个对象,就会报错
    foo = {}; // TypeError: "foo" is read-only
    

    参考:http://es6.ruanyifeng.com/#docs/let

    相关文章

      网友评论

          本文标题:let 和 const命令

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