前端知库

事件循环中,任务和微任务按什么顺序执行?

用一段代码区分同步执行、Promise 回调与 setTimeout。

参考答案

在常见的浏览器场景中,先执行当前任务中的同步代码。到达微任务检查点后,清空微任务队列,包括处理中新增的微任务。浏览器之后有机会更新渲染,再处理后续任务。渲染并不保证发生在每个任务之后。

JavaScript
console.log("A");
setTimeout(() => console.log("B"), 0);
Promise.resolve().then(() => console.log("C"));
console.log("D");
// 输出顺序:A → D → C → B

setTimeout(fn, 0) 表示满足延迟后可以调度,无法保证立即执行。持续递归排入微任务可能阻塞渲染。Node.js 的调度阶段与浏览器不同,需要分场景讨论。