Javascript 执行上下文顺序

Javascript execution context order

首先,我调用了 func1,因此它位于全局执行上下文之上。然后它调用 func2。我想知道的是,调用func2后,func1是立即return还是退出执行栈?或者是,首先 func2 位于 func1 执行上下文之上,它 returns 然后 func1 returns 最后我们回到全局执行上下文?

    func1();


function func1 () {

 func2();
}


function func2 () {

 const x = 2;
}

函数调用是作为堆栈实现的。当调用 func1 时,它会立即调用 func2。当 func2 returns 时,它 returns 到 func1 的范围并从那里继续。浏览器优化可能会意识到 func2() 之后没有更多指令并跳过链备份,但这取决于实现。

在您的示例中,func1 可能会在调用 func2() 后立即 return,因为 运行 没有进一步的代码,但通常情况并非如此.考虑

function func1() {
    const message = "example";
    func2();
    console.log(message);
}

那么在弹出 func2() 的执行上下文后,日志仍会 运行 在执行 func1 时(当 return 从那里开始时)。

执行上下文在堆栈中管理 - call stack - 并且一次只会被推送和弹出。弹出堆栈帧时,它会从堆栈帧被压入时停止的地方继续执行。