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:
parent
67f9495d64
commit
192928dc42
12
docs/let.md
12
docs/let.md
@ -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) {
|
||||
|
Loading…
x
Reference in New Issue
Block a user