docs(let): edit let

This commit is contained in:
ruanyf
2016-12-21 14:54:20 +08:00
parent 67f9495d64
commit 192928dc42
+7 -5
View File
@@ -29,7 +29,7 @@ console.log(i);
上面代码中,计数器`i`只在`for`循环体内有效,在循环体外引用就会报错。
下面的代码如果使用`var`,最后输出的是10
下面的代码如果使用`var`,最后输出的是`10`
```javascript
var a = [];
@@ -55,17 +55,19 @@ for (let i = 0; i < 10; i++) {
a[6](); // 6
```
上面代码中,变量`i``let`声明的,当前的`i`只在本轮循环有效,所以每一次循环的`i`其实都是一个新的变量,所以最后输出的是6
上面代码中,变量`i``let`声明的,当前的`i`只在本轮循环有效,所以每一次循环的`i`其实都是一个新的变量,所以最后输出的是`6`。你可能会问,如果每一轮循环的变量`i`都是重新声明的,那它怎么知道上一轮循环的值,从而计算出本轮循环的值?这是因为 JavaScript 引擎内部会记住上一轮循环的值,初始化本轮的变量`i`时,就在上一轮循环的基础上进行计算
### 不存在变量提升
`let`不像`var`那样会发生“变量提升”现象。所以,变量一定要在声明后使用,否则报错。
```javascript
// var 的情况
console.log(foo); // 输出undefined
console.log(bar); // 报错ReferenceError
var foo = 2;
// let 的情况
console.log(bar); // 报错ReferenceError
let bar = 2;
```
@@ -88,7 +90,7 @@ if (true) {
ES6明确规定,如果区块中存在`let``const`命令,这个区块对这些命令声明的变量,从一开始就形成了封闭作用域。凡是在声明之前就使用这些变量,就会报错。
总之,在代码块内,使用let命令声明变量之前,该变量都是不可用的。这在语法上,称为“暂时性死区”(temporal dead zone,简称TDZ)。
总之,在代码块内,使用`let`命令声明变量之前,该变量都是不可用的。这在语法上,称为“暂时性死区”(temporal dead zone,简称 TDZ)。
```javascript
if (true) {