事件循环
运行流程
- 执行同步代码: js从调用栈顶部开始执行,知道栈为空
- 清空微任务(Mircotasks):只要栈空了,事件循环会立即检查微任务队列。它会一口气执行完所有的微任务,直到该队列清空
- 渲染(Rendering):如果浏览器认为有必要(比如屏幕刷新率到了),会进行UI渲染
- 执行宏任务(Maccotasks):从任务队列中取出一个(且仅一个)任务放入调用栈执行
- 循环:回到步骤2,循环往复
| 类型 | 内容 | 优先级 |
|---|---|---|
| 微任务 | Promise.then/catch/finally,process.nextTick | 高(在当前轮次清空) |
| 宏任务 | setTimeout,setInerval,I/O,UI渲染 | 低(每轮循环只取一个) |