2

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

    func1();


function func1 () {

	func2();
}


function func2 () {

	const x = 2;
}

4

2 回答 2

3

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

于 2018-02-12T16:30:29.190 回答
0

在您的示例中,func1可能会在调用后立即返回,func2()因为没有其他代码要运行,但通常情况并非如此。考虑

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

func1那么在弹出执行上下文func2()(从那里返回时)后,日志仍将在执行中运行。

执行上下文在堆栈(调用堆栈)中进行管理,并且一次只会被推送和弹出一个。弹出堆栈帧时,它会在堆栈帧被压入时从中断处恢复执行。

于 2018-02-12T16:32:20.057 回答