0

我对这两个名字有点困惑,它们是一样的吗?

4

1 回答 1

1

ECMAScript 中没有“事件队列”,也没有“事件循环”和“任务队列”。

ES262 规范只说:

8.4 作业和作业队列

Job 是一个抽象操作,当当前没有其他 ECMAScript 计算正在进行时,它会启动 ECMAScript 计算。作业抽象操作可以定义为接受任意一组作业参数。只有在没有正在运行的执行上下文且执行上下文堆栈为空的情况下,才能启动 Job 的执行。PendingJob 是对未来执行 Job 的请求

[...]

未来执行 Job 的请求是通过在 Job Queue 上排队 PendingJob 记录来进行的,该记录包括 Job 抽象操作名称和任何必要的参数值。

在 ECMAScript 中,只有两个作业队列,一个用于承诺解析,一个用于模块/代码的初始加载,但是规范允许显式定义更多队列。

其他一切都不是由 ECMAScript 本身定义的,而是由运行时实现或其他规范定义的。


您所说的“任务队列”就是一个例子:

它们为浏览器定义为浏览器特定事件的 ES 作业队列。该规范还创造了术语“事件循环”(这也是一个常用术语)来描述清空作业队列的逻辑。

因此可能使用“事件队列”,因为

a) 如果您说有“一个事件循环”清空“一个事件队列”,它简化了多个作业队列的概念。

b)人们从不阅读规格。

c) 这个词是创造出来的,从来没有具体说明过。

于 2019-03-04T15:35:12.063 回答