执行上下文是 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)都有自己的执行上下文。