执行上下文是 JavaScript 代码执行时的环境。每当 JavaScript 代码执行一段可执行代码(如全局代码、函数代码或 eval
代码)时,都会创建一个对应的执行上下文。
全局执行上下文:
window
对象)和 this
。函数执行上下文:
this
。eval
执行上下文:
eval
函数创建(在严格模式下不推荐使用)。执行上下文的生命周期分为三个阶段:
创建阶段:
this
绑定:决定 this
的指向。执行阶段:
销毁阶段:
执行栈,也称为调用栈,是一个后进先出(LIFO,Last In First Out)结构,用于存储在代码执行期间创建的所有执行上下文。每当函数调用时,会创建一个新的执行上下文并将其推入执行栈的顶部。
全局执行上下文入栈:
函数调用:
栈顶执行:
function first() {
second();
console.log('first');
}
function second() {
third();
console.log('second');
}
function third() {
console.log('third');
}
first();
执行上述代码的过程:
first
函数:
first
函数执行上下文并压入栈顶。second
函数:
second
函数执行上下文并压入栈顶。third
函数:
third
函数执行上下文并压入栈顶。third
函数执行完毕后,其执行上下文从栈中弹出。second
函数:
second
,second
函数执行完毕后,其执行上下文从栈中弹出。first
函数:
first
,first
函数执行完毕后,其执行上下文从栈中弹出。最终输出:
third
second
first
eval
)都有自己的执行上下文。