ES6之let/const

ES6 新引入的关键字 letconst,终于使得我们不再忍受 var 怪异的声明提升。

let

众所周知,在 ES6 之前 JavaScript 中都是使用 var 来声明变量,而这种方式有个非常大的缺陷,那就是变量声明在代码编译阶段会提升至最近的函数边界,所以也就导致了 ES6 之前的 JavaScript 中没有块级作用域的概念。

ES6 新引进的 let 关键字完全解决了这一问题,使用 let 声明的变量与使用 var 声明的变量有以下不同:

  • let 声明的变量会自动绑定至最近的块级作用域
  • let 声明的变量不会被绑定为为全局对象的属性
  • 同一作用域内,let 声明的变量不可再被重新声明
  • let 声明的变量不存在声明提升
  • 临时性死区:同一作用域之内,不可在 let 声明变量的代码之前使用同名变量

const

ES6 同时还引入了一个新的用于声明变量的关键字,那就是 const ,它跟 let 表现出来的行为没有什么太大差别,唯一不同点在于:const 是被设计用于声明只读常量的。const 的特性总结如下:

  • const 声明的变量必须在声明的同时初始化而且也只能在声明时初始化
  • const 声明的变量一经初始化,其值就不能改变
  • const 声明的变量会自动绑定至最近的块级作用域
  • const 声明的变量不会被绑定为全局对象的属性
  • 同一作用域内,const 声明的变量不可再被重复声明
  • const 声明的变量不存在声明提升
  • 临时性死区:同一作用域之内,不可在声明变量的代码之前使用该变量

下面是示例代码:

1
2
3
const a; // SyntaxError: Missing initializer in const declaration
const b = 0;
b = 1; // TypeError: Assignment to constant variable

参考