addEventListener的回调函数在Event Loop中的宏任务队列中排队?

Bye*_*oon 5 javascript event-loop

我知道, , setTimeoutapi的回调函数是在宏任务队列中排队的。setIntervalsetImmediate

但是,我不确定addEventListener。

addEventListener的回调函数是否在宏任务队列中排队?

请检查:D

Kai*_*ido 5

我知道setTimeout、setInterval、setImmediate api的回调函数是在宏任务队列中排队的。

它不是。定时器任务队列中排队的是一个任务。该任务的步骤将负责执行回调(通过触发事件算法)。回调本身存储在内存中。
对于事件侦听器来说,情况大致相同,事件回调永远不会在任务源中排队,只有任务或微任务才会排队,并且作为这些任务步骤的一部分,将分派事件并执行回调。

例如,您可以很好地从微任务触发事件(例如slotchange事件,但您也可以使用 强制它自己EventTarget#dispatchEvent()),大多数本机事件通常是任务的一部分(只需在 HTML 规范中搜索短语to fire an event作为示例) ,并且您有大量事件不会从任何任务或微任务触发,而是直接作为更新渲染步骤中事件循环处理的一部分。