DEMO ARTICLE / 示例文章 / 前端基础
JavaScript 事件循环学习笔记(Demo)
用一个短小示例区分同步任务、微任务与宏任务,并理解它们的执行顺序。
Demo 说明:本文用于验证 Markdown、代码高亮与内容路由,不代表作者的真实发表记录。
理解事件循环,关键不是背诵一句“微任务先于宏任务”,而是先看清一轮执行中有哪些队列。
一个最小示例
console.log('A');
setTimeout(() => console.log('B'), 0);
Promise.resolve().then(() => console.log('C'));
console.log('D');
输出顺序是 A → D → C → B。
- 当前脚本作为一个任务执行,同步输出
A与D。 - Promise 回调进入微任务队列。
setTimeout回调进入后续任务队列。- 当前任务结束后,运行时先清空微任务,再进入下一轮任务。
为什么这件事重要
当界面更新、网络请求和状态变更交织在一起时,执行时机直接影响用户看到的结果。遇到“数据明明更新了,视图却慢一步”之类的问题,先画出任务顺序,往往比继续加日志更有效。
| 类型 | 常见来源 | 执行时机 |
|---|---|---|
| 同步代码 | 函数调用 | 当前调用栈 |
| 微任务 | Promise、queueMicrotask | 当前任务结束后 |
| 后续任务 | setTimeout、事件回调 | 下一轮事件循环 |
小结
把异步代码拆成“当前栈—微任务—下一任务”三层,通常就能快速定位大多数时序问题。