"初始全局执行上下文"曾经在JavaScript中弹出调用堆栈?我在谈论堆栈底部的执行上下文。
如果是这样,我认为这意味着在从作业队列中取回回叫之前,它首先被推入堆栈?
或者,只要将回调推送到堆栈上,是[[Scope]].outer
链是否提供对全局环境的访问?
答案 0 :(得分:2)
“初始全局执行上下文”是否曾在JavaScript中从调用堆栈中弹出?我在谈论堆栈底部的执行上下文。
是的,确实如此。空执行上下文堆栈是任何jobs to run的必需品。
但是,没有像“初始全局执行上下文”这样的东西,并且由于堆栈可以为空,因此堆栈底部始终没有单个上下文。
“全局执行上下文”在ScriptEvaluations中创建。每个脚本都有自己的scriptCxt
,但它们在共享领域中的所有脚本都带有相同的全局环境记录。但是,这些scriptCtx
不在堆栈的底部。
位于堆栈底部的“初始执行上下文”是在ECMAScript Initialisation进程中创建的。这是毫无意义的,因为除了新领域之外它没有任何东西,只能作为initialisation of the realm and global object的上下文,但它也用于启动作业队列。
确实是的。我们可以从NextJob算法步骤的说明中看到这一点。这些是在ECMAScript初始化结束和每项工作结束时执行的,基本上如下:如果是这样,我认为这意味着在从作业队列中取回回叫之前,它首先被推入堆栈?
newContext
并将其放在堆栈的底部这些上下文充当每个作业的基础,包含所有发生的执行。在PromiseJobs中,它们被直接使用,而在模块和脚本评估作业中,其他上下文将被推送到堆栈上,用于保存应与其执行代码的相应环境记录。
确实是的。范围链(不要与执行上下文堆栈混淆)确实提供从任何地方到全局环境的访问,该环境位于每个范围链的末尾。或者,它是[[Scope]]。外链,只要将回调推送到堆栈上,就可以访问全局环境吗?