Javascript执行上下文顺序

时间:2018-02-12 16:27:55

标签: javascript executioncontext

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



    func1();


function func1 () {

	func2();
}


function func2 () {

	const x = 2;
}




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 - 并且一次只能推送和弹出一个。弹出堆栈帧时,它会在按下堆栈帧时从中断处继续执行。