执行期上下文
当函数执行时,会创建一个称为执行期上下文的内部对象。一个执行期上下文定义了一个函数执行时的环境,函数每次执行时对应的执行上下文都是独一无二的,所以多次调用一个函数会导致创建多个执行期上下文,当函数执行完毕,所产生执行上下文被销毁。
[[scope]]:存的是作用域链,作用域链存储了执行期上下文集合。
查找变量:在哪个函数里查找变量,就在哪个函数的作用域链的顶端依次向下查找
function a(){
function b(){
var bbb=234;
document.write(aaa);
}
var aaa = 123;
return b;
}
var glob = 100;
var demo=a();
demo();
a定义
//a.[[scope]] -->0:GO{}
a执行(产生执行期上下文ao,放到作用域链最顶端)
//a.[[scope]]-->0:AO{this:window
arguments[]
a:123
b: function b(){}
}
1:GO{this.window
a:function a(){}
glob:100
}
a执行产生b定义
b执行(产生自己的执行期上下文ao,放到作用域最顶端)
b[[scope]]-->0:bAO{
this:window
arguments:[]
b:234
}
1: aAO {
this:window
arguments[]
a:123
b: function b(){}
}
2:GO{this.window
a:function a(){}
glob:100
}
输出结果