1
0
mirror of https://github.com/ruanyf/es6tutorial.git synced 2025-05-27 20:32:21 +00:00

docs(let): edit let

This commit is contained in:
ruanyf 2016-12-21 14:54:20 +08:00
parent 67f9495d64
commit 192928dc42

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) {