1、let的引入
ES6 新增了let
命令,用来声明变量。它的用法类似于var
,但是所声明的变量,只在let
命令所在的代码块内有效。
2、基本用法
{
let a = 10;
var b = 1;
}
a // ReferenceError: a is not defined.
b // 1
上面代码在代码块之中,分别用let
和var
声明了两个变量。然后在代码块之外调用这两个变量,结果let
声明的变量报错,var
声明的变量返回了正确的值。这表明,let
声明的变量只在它所在的代码块有效。
我们在使用for
循环的计数器时,就很适合使用let
命令,如下:
for (let i = 0; i < 10; i++) {
// ...
}
console.log(i);
// ReferenceError: i is not defined
上面代码中,计数器i只在 for
循环体内有效,在循环体外引用就会报错。如果使用 var
,最后输出的是10。
3、不存在变量提升
var
命令会存在“变量提升”现象,即变量可以在声明之前使用,值为undefined
。这种现象会让人觉得很奇怪,按照一般的逻辑,变量应该在声明语句之后才可以使用。
那么为了纠正(避免)这种现象,let
命令改变了语法行为,它所声明的变量一定要在声明后使用,否则会报错。
// var 的情况
console.log(foo); // 输出undefined
var foo = 2;
// let 的情况
console.log(bar); // 报错ReferenceError
let bar = 2;