diff --git a/docs/let.md b/docs/let.md index 9c7e766..dd58a21 100644 --- a/docs/let.md +++ b/docs/let.md @@ -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(); +``` ### 不允许重复声明