JS:对Eventloop和全局执行上下文的疑惑

问题描述 投票:0回答:1

在 vanilla JS 中,即使在 JS 引擎完成执行全局执行上下文之前,事件循环也可以从回调队列中获取函数并将其推送到调用堆栈上。

javascript
1个回答
0
投票

“事件循环”不是 ECMAScript(“vanilla”)术语。然而,该规范确实定义了主机在处理“工作”时应遵循的一些规则。这些规则之一是,当 JavaScript 代码仍在执行时,引擎不会启动任何排队作业。仅当代码运行完成且调用堆栈为空时,作业才会轮到执行。 请参阅关于

作业和作业队列

的 ECMAScript 规范:

只有在没有运行的执行上下文且执行上下文堆栈为空的情况下,才能发起Job的执行。

还有
作业和主机操作以将作业入队

它们的实现必须符合以下要求:

    在未来的某个时间点,当为其调度作业的代理中没有运行上下文并且该代理的执行上下文堆栈为空时,实现必须:
  • 执行主机定义的任何准备步骤。
    • 调用作业摘要关闭。
    • 执行任何主机定义的清理步骤,之后执行上下文堆栈必须为空。
  • 代理中任何时间点都可能只有一项作业正在积极接受评估。
  • 一旦开始评估作业,它必须先运行完成,然后才能在代理中开始评估任何其他作业。
© www.soinside.com 2019 - 2024. All rights reserved.