切换上下文
定义
【0】我们知道:函数能够引用定义时的变量,也能记住定义时的 this
【1】在 JavaScript 标准中,为函数规定了用来保存定义时上下文的私有属性 [[Environment]]。
【2】当一个函数执行时,会创建一条新的执行环境记录,记录的外层词法环境(outer lexical environment)会被设置成函数的 [[Environment]]。
【总结】1、2就是切换上下文
举个例子:
var a = 1;
foo();
> 在别处定义了 foo:
var b = 2;
function foo(){
console.log(b); // 2
console.log(a); // error
}
foo 能访问 b(定义时词法环境),却不能访问 a(执行时的词法环境)
这就是执行上下文的切换机制
JS引擎的处理
JavaScript 用一个栈来管理执行上下文,这个栈中的每一项又包含一个链表
函数调用时,入栈一个新的执行上下文
函数调用结束时,执行上下文被出栈