1、ES6 新增了​​let​​​命令,用来声明变量。它的用法类似于​​var​​​,但是所声明的变量,只在​​let​​命令所在的代码块内有效。 

{
let a = 10;
var b = 1;
}

a // ReferenceError: a is not defined.
b // 1

2、​​let​​不存在变量提升

​var​​​命令会发生“变量提升”现象,即变量可以在声明之前使用,值为​​undefined​​。这种现象多多少少是有些奇怪的,按照一般的逻辑,变量应该在声明语句之后才可以使用。

为了纠正这种现象,​​let​​命令改变了语法行为,它所声明的变量一定要在声明后使用,否则报错。

// var 的情况
console.log(foo); // 输出undefined
var foo = 2;

// let 的情况
console.log(bar); // 报错ReferenceError
let bar = 2;

文档