我对这两个名字有点困惑,它们是一样的吗?
1 回答
ECMAScript 中没有“事件队列”,也没有“事件循环”和“任务队列”。
ES262 规范只说:
8.4 作业和作业队列
Job 是一个抽象操作,当当前没有其他 ECMAScript 计算正在进行时,它会启动 ECMAScript 计算。作业抽象操作可以定义为接受任意一组作业参数。只有在没有正在运行的执行上下文且执行上下文堆栈为空的情况下,才能启动 Job 的执行。PendingJob 是对未来执行 Job 的请求
[...]
未来执行 Job 的请求是通过在 Job Queue 上排队 PendingJob 记录来进行的,该记录包括 Job 抽象操作名称和任何必要的参数值。
在 ECMAScript 中,只有两个作业队列,一个用于承诺解析,一个用于模块/代码的初始加载,但是规范允许显式定义更多队列。
其他一切都不是由 ECMAScript 本身定义的,而是由运行时实现或其他规范定义的。
您所说的“任务队列”就是一个例子:
它们为浏览器定义为浏览器特定事件的 ES 作业队列。该规范还创造了术语“事件循环”(这也是一个常用术语)来描述清空作业队列的逻辑。
因此可能使用“事件队列”,因为
a) 如果您说有“一个事件循环”清空“一个事件队列”,它简化了多个作业队列的概念。
b)人们从不阅读规格。
c) 这个词是创造出来的,从来没有具体说明过。