es6 相关知识点

 let 以及 const

let命令

  • let 声明的变量只在它所在的代码块有效。

    //let 声明 只在当前作用域有效
    var a = [];
    for (let i = 0; i < 10; i++) {
      a[i] = function () {
        console.log(i);
      };
    }
    a[6](); // 6
    
    //var 声明 在全局作用域有效
    var a = [];
    for (var i = 0; i < 10; i++) {
      a[i] = function () {
        console.log(i);
      };
    }
    a[6](); // 10
  • let 不存在变量提升,在let声明之前使用变量,会报错ReferenceError

    // var 的情况
    console.log(foo); // 输出undefined
    var foo = 2;
    
    // let 的情况
    console.log(bar); // 报错ReferenceError
    let bar = 2;
  • let 不允许重复声明

    // 报错
    function () {
      let a = 10;
      var a = 1;
    }
    
    // 报错
    function () {
      let a = 10;
      let a = 1;
    }

不能在函数内部重新声明参数

function func(arg) {
  let arg; // 报错
}

function func(arg) {
  {
    let arg; // 不报错
  }
}

const 命令

  • 一旦声明,常量的值就不改变,只在声明所在的块级作用域有效。
  • const 命令声明的常量也是不提升,同样存在暂时性死区。
  • 本质: const 实际上保证的,不是变量的值不能改动,而是变量指向的那个内存地址不得改动。对于简单的数据(数值、字符串、布尔值),值就保存在变量指向的那个内存地址,因此等同于常量。但对于复合类型(引用类型)的数据(主要是对象和数组),变量指向的内存地址,保存的只是一个指针, const 只能保证这个指针是固定的,至于它指向的数据结构是不是可变的,不能控制。

skater_ding
88 声望2 粉丝

爱前端,爱技术。