- 函数的作用域再函数定义时就已经决定了,这是因为函数有一个内部属性
[[scope]]
,当函数创建时,就会保存其所有父变量对象到其中,可以理解为[[scope]]
就是所有父变量对象的层级链,但是注意:[[scope]]
并不代表完整的作用域链。
//例子
function foo() {
function bar(){
}
}
| 创建函数时各自的[[scope]]
为:
foo.[[scope]] = [
globalContext.VO;
];
bar.[[scope]] = [
fooContext.AO;
globalContext.VO;
];
- 由此可见 函数作用域是由[[scope]]组成的链式结构