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 - 并且一次只会被推送和弹出。弹出堆栈帧时,它会从堆栈帧被压入时停止的地方继续执行。
首先,我调用了 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 - 并且一次只会被推送和弹出。弹出堆栈帧时,它会从堆栈帧被压入时停止的地方继续执行。