mirror of
https://github.com/ruanyf/es6tutorial.git
synced 2024-04-21 12:32:22 +00:00
docs(symbol): edit symbol
This commit is contained in:
+4
-4
@@ -723,7 +723,7 @@ let arr = [...obj]; // TypeError: Cannot spread non-iterable object
|
||||
|
||||
## 严格模式
|
||||
|
||||
从ES5开始,函数内部可以设定为严格模式。
|
||||
从 ES5 开始,函数内部可以设定为严格模式。
|
||||
|
||||
```javascript
|
||||
function doSomething(a, b) {
|
||||
@@ -732,7 +732,7 @@ function doSomething(a, b) {
|
||||
}
|
||||
```
|
||||
|
||||
《ECMAScript 2016标准》做了一点修改,规定只要函数参数使用了默认值、解构赋值、或者扩展运算符,那么函数内部就不能显式设定为严格模式,否则会报错。
|
||||
ES2016 做了一点修改,规定只要函数参数使用了默认值、解构赋值、或者扩展运算符,那么函数内部就不能显式设定为严格模式,否则会报错。
|
||||
|
||||
```javascript
|
||||
// 报错
|
||||
@@ -762,7 +762,7 @@ const obj = {
|
||||
};
|
||||
```
|
||||
|
||||
这样规定的原因是,函数内部的严格模式,同时适用于函数体代码和函数参数代码。但是,函数执行的时候,先执行函数参数代码,然后再执行函数体代码。这样就有一个不合理的地方,只有从函数体代码之中,才能知道参数代码是否应该以严格模式执行,但是参数代码却应该先于函数体代码执行。
|
||||
这样规定的原因是,函数内部的严格模式,同时适用于函数体和函数参数。但是,函数执行的时候,先执行函数参数,然后再执行函数体。这样就有一个不合理的地方,只有从函数体之中,才能知道参数是否应该以严格模式执行,但是参数却应该先于函数体执行。
|
||||
|
||||
```javascript
|
||||
// 报错
|
||||
@@ -772,7 +772,7 @@ function doSomething(value = 070) {
|
||||
}
|
||||
```
|
||||
|
||||
上面代码中,参数`value`的默认值是八进制数`070`,但是严格模式下不能用前缀`0`表示八进制,所以应该报错。但是实际上,JavaScript引擎会先成功执行`value = 070`,然后进入函数体内部,发现需要用严格模式执行,这时才会报错。
|
||||
上面代码中,参数`value`的默认值是八进制数`070`,但是严格模式下不能用前缀`0`表示八进制,所以应该报错。但是实际上,JavaScript 引擎会先成功执行`value = 070`,然后进入函数体内部,发现需要用严格模式执行,这时才会报错。
|
||||
|
||||
虽然可以先解析函数体代码,再执行参数代码,但是这样无疑就增加了复杂性。因此,标准索性禁止了这种用法,只要参数使用了默认值、解构赋值、或者扩展运算符,就不能显式指定严格模式。
|
||||
|
||||
|
||||
Reference in New Issue
Block a user