let和const

一、let

所声明变量只在所在的代码块中有效

  1. 不存在变量提升
    typeof x; //ReferenceError
    let x;
  2. 暂时性死区

ES6明确规定如果区块中存在let和const命令,则这个区块对这些命令声明的变量从一开始就形成封闭作用域。只要在声明之前使用这些变量,就会报错。

   var tmp = 123;
    if (true) {
      tmp = 'abc'; //ReferenceError
      let tmp; 
     }
  1. 不允许在相同的作用域中重复声明
    function (){
    let a = 1;
    let a = 2;
    } // 报错

ES6的块级作用域一方面可以避免内层变量可能覆盖外层变量,另一方面可以避免用来计数的循环变量泄漏为全局变量;

二、const

  1. 一旦使用const声明,其值就不能再改变,所以声明后必须立即初始化,不能留到以后赋值

  2. 与let一样,拥有块级作用域

  3. 不存在变量提升,同样存在暂时性死区

  4. 对于复合类型,变量名不指向数据,而是指向数据所在的地址

    const foo = {};
    foo.prop = 123; // ok
    foo = {prop:123}; // typeError: 'foo' is read-only
    

真的想冻结一个对象,使用 Object.freeze()

6种声明变量方法:var,function ,let, const, import, class

你可能感兴趣的:(let和const)