上下文
对于全局上下文,它是全局对象自身;对于函数,它是AO对象。
scope属性
函数内部有个[[ scope ]]
,它是用来保存作用域链的。
作用域链大多数与内部函数相关。
例子
var x = 10;
function foo() {
var y = 20;
function bar() {
alert(x + y);
}
return bar;
}
foo()(); // 30
foo函数被定义时
foo.[[ scope ]] = [
Global Object
]
foo函数被调用时
foo.[[ scope ]] = [
foo函数的AO的对象,
Global Object
]
bar函数被定义时
bar.[[ scope ]] = [
foo函数的AO的对象,
Global Object
]
bar函数被调用时
bar.[[ scope ]] = [
bar函数的AO的对象,
foo函数的AO的对象,
Global Object
]
注意
[[ scope ]]
在函数创建时被存储,静态(不变的),永远永远,直至函数销毁。
函数可以永不调用,但[[ scope ]]
属性已经写入,并存储在函数对象中。
查找变量
当函数需要用到某个变量时,在作用域链中从上往下的查找
更详细的文档传送门
网友评论