好的,首先我调用func1,因此它处于全局执行上下文之上。然后它调用func2。我想知道的是,在调用func2之后,func1会立即返回还是从执行堆栈中退出?或者是这样,首先func2在func1执行上下文之上,它返回然后func1返回,最后我们回到全局执行上下文?
func1();
function func1 () {
func2();
}
function func2 () {
const x = 2;
}

答案 0 :(得分:3)
函数调用实现为堆栈。调用func1
时,会立即调用func2
。当func2
返回时,它将返回func1
的范围并从那里继续。浏览器优化可能会意识到func2()
之后没有更多指令并跳过链备份,但这依赖于实现。
答案 1 :(得分:0)
在您的示例中,func1
可能会在调用func2()
后立即返回,因为没有其他代码可以运行,但一般情况并非如此。考虑
function func1() {
const message = "example";
func2();
console.log(message);
}
然后,在弹出func1
的执行上下文(从那里返回)后,日志仍会在执行func2()
时运行。
执行上下文在堆栈中管理 - call stack - 并且一次只能推送和弹出一个。弹出堆栈帧时,它会在按下堆栈帧时从中断处继续执行。