首页 > 代码库 > ES6系列,1.新增let和const命令

ES6系列,1.新增let和const命令

由于ES5只有全局作用域和函数作用域,因此ES6增加块级作用域。
  let用于定义变量,块级作用域,for循环建议使用let;
  let会引起变量提升,必须先声明,在调用;
  let声明的变量,不允许重复声明;
  let实际是创建了块级作用域,可以变成do表达式
    例:let x = do {
      let t = f();
      t * t + 1;
    };
  上面代码中,变量x会得到整个块级作用域的返回值。
  const变量定义常量,一旦定义,不可以修改;
  const一旦声明变量,就必须立即初始化,不能留到以后赋值;
  const的作用域与let命令相同:只在声明所在的块级作用域内有效;
  const本质上保证的是保存的地址不可改动,内容是可以变化的;
    例:const foo = {};
    // 为 foo 添加一个属性,可以成功
    foo.prop = 123;
    foo.prop // 123
    // 将 foo 指向另一个对象,就会报错
    foo = {}; // TypeError: "foo" is read-only
  暂时性死区:
    let和const都会存在,一旦声明,必须在声明之后使用,否则报错。

  到现在ES6一共有六种声明变量的方法:
    var、function、let、const四种
    和以后新增的import和class共六种。
   同时,之前顶层对象的属性赋值与全局变量的赋值,是同一件事:
    var a = 3 与 window.a = 3 是一致的
    这点一直是js一大败笔之一,ES6为了改变这一点,一方面规定,var和function依旧
    是全局变量,顶层属性;另一方面规定,let命令、const命令、class命令声明的全局
    变量,不属于顶层对象的属性。
    let b = 1;
    window.b //undefined

ES6系列,1.新增let和const命令