执行期上下文分为全局执行期上下文、函数执行期上下文、eval的执行期上下文,这里总结前两种。
1.全局执行期上下文:只有一个,称为GO。
2.函数执行期上下文:基于函数定义时的上下文,在被调用或执行前去创建自己的执行期上下文,即为自己的AO。注意:函数执行期上下文由在哪里定义决定,而不是调用时决定。
3.执行期上下文生成过程
- 函数调用前基于函数定义时的作用域链创建自己的AO(执行期上下文),置于作用域链的组顶端
- 查找函数内声明的变量和形参,其值为
undefined
- 把形参的值变为实参
- 查找函数内的函数声明,其值为函数体
例:
var value='window';
function fn(){
console.log(value);
}
function fun(){
var value='fun';
fn();
}
fun();
// 上面代码段的执行结果为'window'。
// 原因为:函数执行期上下文由在哪里定义决定,而不是调用时决定。
// 函数fn在全局定义,所以它执行期上下文是基于全局的,只是在函数fun中被调用而已。
// 扩展:如果函数fn在函数fun中被定义,那么fn使用的value就是fun中定义的value