JS 底层探究-- 事件循环

JS 主线程单线程,同一时刻仅执行一个任务。

执行规则:同步任务优先执行,所有同步执行完毕后,再处理异步任务。

一、同步任务

存放在 调用栈 (Call Stack),代码从上到下依次执行,栈空才会去读取任务队列。

二、微任务

同步代码执行完后,优先清空所有微任务,再执行宏任务。

常见微任务:

  • Promise.then / .catch / .finally
  • async/await 后续代码(await 之后)
  • queueMicrotask()
  • MutationObserver(浏览器端)

三、宏任务

微任务队列清空后,才执行宏任务。每执行完一个宏任务,就再次检查微任务。

常见宏任务:

  • setTimeout / setInterval
  • setImmediate(Node)
  • DOM 事件、UI 渲染
  • AJAX 请求

四、完整执行流程(浏览器事件循环)

  1. 执行全局同步代码,依次压入调用栈执行;
  2. 同步代码执行完毕,调用栈为空;
  3. 读取微任务队列 ,一次性执行所有微任务;
  4. 微任务全部清空后,取出第一个宏任务执行;
  5. 该宏任务执行完 → 回到步骤 3,再次检查微任务,循环往复(事件循环)。
相关推荐
数据掘金2 小时前
小程序埋点方案的埋点文档怎么自动生成?
前端
deli0072 小时前
cron 表达式为什么总跑错?10 个场景实测,下次执行时间一眼看懂
前端
代码猎人2 小时前
前端怎么优化页面性能
前端
Zenova EdgeOS3 小时前
Rust TUI 实战:用 ratatui 构建工业边缘终端界面
开发语言·后端·rust·工业网关
代码猎人3 小时前
前端怎么配合后端完成数据对接
前端
lexiangqicheng3 小时前
Docker的沙箱机制是怎样的?
前端·javascript
学逆向的3 小时前
C 选择结构的执行效率分析
c语言·开发语言·算法·网络安全
燕落南枝3 小时前
HTML 表格标签与 AI 合并单元格实战指南
前端·人工智能·html
geats人山人海3 小时前
java 8 字符串
java·开发语言
云和数据.ChenGuang3 小时前
Golang AI 工程师路线图:从入门到实战
开发语言·人工智能·后端·golang