ECMAScript根据需要定义了2 种类型的作业:Promise Jobs 和 Script Jobs。Promise Jobs 的情况很清楚:您为自己创建了一个 Promise 或异步函数 - 就是这样,一个新的 Promise Job 被创建并添加到队列中。
但是脚本作业呢?创作这类作品需要做什么?
我知道 Script Jobs 还包括模块代码。但是在导入模块时不是立即执行吗?尽管规范说工作需要“延迟”并稍后执行(如 Promises 的情况)。
简而言之,启动一个新作业并将其添加到 Script Jobs 队列需要做什么?
在排队方面唯一提到 ScriptJob 是指第8.6 段 RunJobs - 第二步说:
它是这样说的:您需要选择那些注定要执行的脚本 - 并将它们放入队列中。接下来,第三步依次描述它们的执行。
反过来,规范中的其他地方没有提到 RunJobs,这是入口点。
因此,ScriptJob 是主机出于任何原因决定下载和执行的任何代码。这段描述的关键点在于,对一个 ScriptJob 进行排队和执行所有队列是同一个 RunJobs 操作中的两个步骤,因此根据规范,不执行挂起的延续(PromiseJob)是不可能执行任意代码的。
为什么一切都那么复杂,我不知道。显然,他们正试图制定这样的规范,以便原则上不能以不同的方式阅读
(或根本无法阅读)