这里先来看一段代码,这是HTML规范里提到的:
eventLoop = { taskQueues: { events: [], // UI events from native GUI framework parser: [], // HTML parser callbacks: [], // setTimeout, requestIdleTask resources: [], // image loading domManipulation: [] }, microtaskQueue: [ ], nextTask: function() { // Spec says: // "Select the oldest task on one of the event loop's task queues" // Which gives browser implementers lots of freedom // Queues can have different priorities, etc. for (let q of taskQueues) if (q.length > 0) return q.shift(); return null; }, executeMicrotasks: function() { if (scriptExecuting) return; let microtasks = this.microtaskQueue; this.microtaskQueue = []; for (let t of microtasks) t.execute(); }, needsRendering: function() { return vSyncTime() && (needsDomRerender() || hasEventLoopEventsToDispatch()); }, render: function() { dispatchPendingUIEvents(); resizeSteps(); scrollSteps(); mediaQuerySteps(); cssAnimationSteps(); fullscreenRenderingSteps