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,再次检查微任务,循环往复(事件循环)。
相关推荐
君顾14 小时前
智慧零售实战指南:从技术架构到落地方案全解析
java·开发语言·零售
南棱笑笑生4 小时前
20260904实测给飞凌OK3576-C开发板刷入Rockchip原厂的IMG固件【使用飞凌的DTS】切换串口波特率为1.5Mbps
c语言·开发语言·rockchip
梦曦i4 小时前
@meng-xi/create-uni-app vs unibest:轻量脚手架与重型框架的定位之争
前端·uni-app
平头哥技术团队4 小时前
Day 10 | 工欲善其事:VS Code 配置与项目归档
android·开发语言·前端·javascript·html·交互
乌萨奇也要立志学C++4 小时前
【洛谷】kmp算法
开发语言·算法
传奇开心果编程5 小时前
【Rust入门知识点学与练】第4课:条件判断 if / else
开发语言·学习·rust
乌恩大侠5 小时前
GH200 新增 NVMe SSD 分区、格式化与挂载完整流程
运维·服务器·前端
m0_380743875 小时前
给 Claude API 调用补上超时重试和错误分类
开发语言·人工智能·php
yume_sibai5 小时前
Element Plus 数据展示组件完全指南(15个核心组件)
前端·javascript·vue.js
Draw Stars5 小时前
Git BASH安装教程
开发语言·git·bash