This commit is contained in:
Ruan Yifeng
2015-03-28 08:30:28 +08:00
parent 15bcc0e81a
commit 9d2ef28e22
+15 -2
View File
@@ -140,7 +140,7 @@ bar(); // 报错
上面代码中,调用bar函数之所以报错,是因为参数x默认值等于另一个参数y,而此时y还没有声明,属于”死区“。
需要注意的是,函数参数的作用域函数的作用域是分离的
需要注意的是,函数的作用域是其声明时所在的作用域。如果函数A的参数是函数B,那么函数B的作用域不是函数A
```javascript
@@ -155,7 +155,20 @@ bar();
```
上面代码中,函数bar的参数func,默认是一个匿名函数,返回值为变量foo。这个匿名函数运行时,foo只在函数体外声明,内层的声明还没执行,因此foo指向函数体外的声明,输出outer。
上面代码中,函数bar的参数func,默认是一个匿名函数,返回值为变量foo。这个匿名函数的作用域就不是bar。这个匿名函数声明时,是处在外层作用域,所以内部的foo指向函数体外的声明,输出outer。它实际上等同于下面的代码。
```js
let foo = 'outer';
let f = x => foo;
function bar(func = f) {
let foo = 'inner';
console.log(func()); // outer
}
bar();
```
### 不允许重复声明