首先,我调用 func1,因此它位于全局执行上下文之上。然后它调用func2。我想知道的是,调用func2之后,func1是立即返回还是退出执行栈?或者是这样的,首先 func2 在 func1 执行上下文之上,它返回,然后 func1 返回,最后我们回到全局执行上下文?
func1();
function func1 () {
func2();
}
function func2 () {
const x = 2;
}
首先,我调用 func1,因此它位于全局执行上下文之上。然后它调用func2。我想知道的是,调用func2之后,func1是立即返回还是退出执行栈?或者是这样的,首先 func2 在 func1 执行上下文之上,它返回,然后 func1 返回,最后我们回到全局执行上下文?
func1();
function func1 () {
func2();
}
function func2 () {
const x = 2;
}
函数调用被实现为堆栈。当func1
被调用时,它立即调用func2
. 返回时func2
,它返回到范围func1
并从那里继续。浏览器优化可能会意识到之后没有更多指令func2()
并跳过链备份,但这取决于实现。
在您的示例中,func1
可能会在调用后立即返回,func2()
因为没有其他代码要运行,但通常情况并非如此。考虑
function func1() {
const message = "example";
func2();
console.log(message);
}
func1
那么在弹出执行上下文func2()
(从那里返回时)后,日志仍将在执行中运行。
执行上下文在堆栈(调用堆栈)中进行管理,并且一次只会被推送和弹出一个。弹出堆栈帧时,它会在堆栈帧被压入时从中断处恢复执行。