mirror of
https://github.com/ruanyf/es6tutorial.git
synced 2025-05-24 18:32:22 +00:00
edit let
This commit is contained in:
parent
1b550c7627
commit
cd9fac819e
14
docs/let.md
14
docs/let.md
@ -75,11 +75,11 @@ if (1) {
|
|||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
上面代码中,由于块级作用域内typeof运行时,x还没有值,所以会抛出一个`ReferenceError`。
|
上面代码中,由于块级作用域内`typeof`运行时,`x`还没有值,所以会抛出一个`ReferenceError`。
|
||||||
|
|
||||||
### 暂时性死区
|
### 暂时性死区
|
||||||
|
|
||||||
只要块级作用域内存在let命令,它所声明的变量就“绑定”(binding)这个区域,不再受外部的影响。
|
只要块级作用域内存在`let`命令,它所声明的变量就“绑定”(binding)这个区域,不再受外部的影响。
|
||||||
|
|
||||||
```javascript
|
```javascript
|
||||||
var tmp = 123;
|
var tmp = 123;
|
||||||
@ -90,9 +90,9 @@ if (true) {
|
|||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
上面代码中,存在全局变量tmp,但是块级作用域内let又声明了一个局部变量tmp,导致后者绑定这个块级作用域,所以在let声明变量前,对tmp赋值会报错。
|
上面代码中,存在全局变量`tmp`,但是块级作用域内`let`又声明了一个局部变量`tmp`,导致后者绑定这个块级作用域,所以在`let`声明变量前,对`tmp`赋值会报错。
|
||||||
|
|
||||||
ES6明确规定,如果区块中存在let和const命令,这个区块对这些命令声明的变量,从一开始就形成了封闭作用域。凡是在声明之前就使用这些命令,就会报错。
|
ES6明确规定,如果区块中存在`let`和`const`命令,这个区块对这些命令声明的变量,从一开始就形成了封闭作用域。凡是在声明之前就使用这些命令,就会报错。
|
||||||
|
|
||||||
总之,在代码块内,使用let命令声明变量之前,该变量都是不可用的。这在语法上,称为“暂时性死区”(temporal dead zone,简称TDZ)。
|
总之,在代码块内,使用let命令声明变量之前,该变量都是不可用的。这在语法上,称为“暂时性死区”(temporal dead zone,简称TDZ)。
|
||||||
|
|
||||||
@ -110,7 +110,7 @@ if (true) {
|
|||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
上面代码中,在let命令声明变量tmp之前,都属于变量tmp的“死区”。
|
上面代码中,在`let`命令声明变量`tmp`之前,都属于变量`tmp`的“死区”。
|
||||||
|
|
||||||
有些“死区”比较隐蔽,不太容易发现。
|
有些“死区”比较隐蔽,不太容易发现。
|
||||||
|
|
||||||
@ -122,7 +122,7 @@ function bar(x = y, y = 2) {
|
|||||||
bar(); // 报错
|
bar(); // 报错
|
||||||
```
|
```
|
||||||
|
|
||||||
上面代码中,调用bar函数之所以报错,是因为参数x默认值等于另一个参数y,而此时y还没有声明,属于”死区“。
|
上面代码中,调用`bar`函数之所以报错,是因为参数`x`默认值等于另一个参数`y`,而此时`y`还没有声明,属于”死区“。
|
||||||
|
|
||||||
需要注意的是,函数的作用域是其声明时所在的作用域。如果函数A的参数是函数B,那么函数B的作用域不是函数A。
|
需要注意的是,函数的作用域是其声明时所在的作用域。如果函数A的参数是函数B,那么函数B的作用域不是函数A。
|
||||||
|
|
||||||
@ -137,7 +137,7 @@ function bar(func = x => foo) {
|
|||||||
bar();
|
bar();
|
||||||
```
|
```
|
||||||
|
|
||||||
上面代码中,函数bar的参数func,默认是一个匿名函数,返回值为变量foo。这个匿名函数的作用域就不是bar。这个匿名函数声明时,是处在外层作用域,所以内部的foo指向函数体外的声明,输出outer。它实际上等同于下面的代码。
|
上面代码中,函数`bar`的参数`func`,默认是一个匿名函数,返回值为变量`foo`。这个匿名函数的作用域就不是`bar`。这个匿名函数声明时,是处在外层作用域,所以内部的`foo`指向函数体外的声明,输出`outer`。它实际上等同于下面的代码。
|
||||||
|
|
||||||
```javascript
|
```javascript
|
||||||
let foo = 'outer';
|
let foo = 'outer';
|
||||||
|
Loading…
x
Reference in New Issue
Block a user