gpt4 book ai didi

javascript - 需要澄清执行上下文

转载 作者:行者123 更新时间:2023-12-05 05:38:24 25 4
gpt4 key购买 nike

function a(){
b();
var c;
}

function b(){
var d;
}

a();
var d;

我想澄清上面代码的执行上下文。据我了解,在执行上下文函数的创建阶段 ab 被设置为指向堆内存中位置的指针和 var d设置为 undefined。在执行阶段,函数声明 ab 被简单地忽略。

我感到困惑的是,当我们在执行阶段调用函数 a 时,当我们弹出 a() 时,Global Execution Cont 是否仍在执行阶段> 来自堆栈的执行上下文,所以我们可以处理 var d?或者 GEC 的执行阶段是否在我们调用 a() 之后就结束了,然后当 GEC 是堆栈中唯一剩下的上下文时我们以某种方式扫描 var d

据我了解,在 GEC 执行阶段之后,将调用 a() 并将新的 a() 执行上下文 放入执行堆栈。然后在 a() 的执行阶段完成后,我们将新的 b() 执行上下文 放在堆栈上。在我们弹出 b() 的执行上下文之后,我们可以处理 var c 并且在我们弹出 a() 的执行堆栈 之后,我们可以处理全局执行栈的var d

最大的困惑是如果两个上下文的执行阶段都已经结束,JS 引擎如何检查 var cvar b。执行上下文实际上结束了还是仍在为每个上下文运行?我们是否能够扫描 var cvar d 由于变量对象 (VO) 保存有关当前执行上下文的信息或由于所有先前的执行上下文仍在运行执行阶段?

最佳答案

因此,js 中的调用堆栈按后进先出方式工作,考虑到您的示例,执行上下文将按以下方式执行

  1. 初始

[gec]

  1. 调用a()

[执行上下文]

[gec]

  1. 调用 b()

[b 执行上下文]

[执行上下文]

[gec]

  1. b() 执行完毕

[执行上下文]

[gec]

  1. a() 执行完毕

[gec]

希望对你有帮助!!!

关于javascript - 需要澄清执行上下文,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72919286/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com