什么是执行上下文
执行上下文(Execution contexts)是指 函数调用 在执行栈中产生的变量对象
执行上下文栈
JavaScript 引擎创建了执行上下文栈(Execution context stack,ESC)来管理执行上下文
我们模拟执行上下文栈是一个数组:ECStack = []
当执行一个函数的时候,就会创建一个执行上下文,并且押入执行上下文栈,当函数执行完毕的时候,就会将函数的执行上下文从栈中弹出
举个例子
function fun3() {
console.log('fun3');
}
function fun2() {
fun3();
}
function fun1() {
fun2();
}
fun1();
我们用伪代码模拟入栈和出栈的行为
ECStack.push(<fun1> functionContext);
ECStack.push(<fun2> functionContext)
ECStack.push(<fun3> functionContext)
// fun3 执行完毕
ECStack.pop();
// fun2 执行完毕
ECStack.pop();
// fun1 执行完毕
ECStack.pop();
作用域 和 上下文
作用域(scope)和上下文(context)是两个不同的概念。每一个函数调用都有一个与之相关的作用域和上下文
作用域是 function-based 而 上下文是 object-based
换句话说,作用域代表了当一个函数被调用时,变量的访问范围,并且对于每次调用时唯一的
上下文的值永远是 this 的值,是对当前拥有当前正在执行的代码的对象的引用
网友评论