首页 > web前端 > js教程 > 正文

什么是JavaScript事件循环_宏任务与微任务执行顺序如何

夢幻星辰
发布: 2025-12-19 12:27:08
原创
502人浏览过
JavaScript事件循环中宏任务包括全局脚本、setTimeout/setInterval回调等,微任务包括Promise.then、queueMicrotask等;执行顺序为:一个宏任务→全部微任务→下一个宏任务。

什么是javascript事件循环_宏任务与微任务执行顺序如何

JavaScript 是单线程语言,靠事件循环(Event Loop)协调同步任务、异步回调的执行顺序。宏任务(Macrotask)和微任务(Microtask)是事件循环中两类关键任务,它们的执行顺序决定了代码的实际运行时序。

宏任务有哪些

宏任务是事件循环一次“迭代”中执行的主要任务,每次只取一个执行。常见宏任务包括:

  • 全局脚本(初始执行的代码)
  • setTimeoutsetInterval 的回调
  • setImmediate(仅 Node.js
  • I/O 回调(Node.js 环境)
  • UI 渲染(浏览器环境,如重绘、重排)
  • postMessageMessageChannel 消息处理

微任务有哪些

微任务在**当前宏任务结束之后、下一个宏任务开始之前**立即执行,且会清空整个微任务队列。常见微任务包括:

  • Promise.then/catch/finally 的回调(注意:Promise 构造器内的执行是同步的)
  • queueMicrotask() 注册的函数
  • MutationObserver 的回调(DOM 变化监听)
  • await 后续代码(本质是 Promise 微任务的语法糖)

执行顺序规则

事件循环按以下固定节奏运转:

立即学习Java免费学习笔记(深入)”;

慧中标AI标书
慧中标AI标书

慧中标AI标书是一款AI智能辅助写标书工具。

慧中标AI标书 295
查看详情 慧中标AI标书
  1. 执行一个宏任务(如 script、setTimeout 回调)
  2. 执行过程中遇到微任务,暂存到微任务队列
  3. 当前宏任务执行完后,立即依次执行所有已排队的微任务(直到队列为空)
  4. 浏览器可能进行 UI 渲染(可选,非强制步骤)
  5. 从宏任务队列中取出下一个宏任务,重复上述流程

关键点:微任务总在宏任务之间「插队」,且一次清空全部;宏任务之间不会插入其他宏任务。

典型例子看执行顺序

下面这段代码能清晰体现层级关系:

console.log(1);
setTimeout(() => console.log(2), 0);
Promise.resolve().then(() => console.log(3));
console.log(4);
登录后复制

输出顺序是:1 → 4 → 3 → 2。解释如下:

  • 1 和 4 是同步代码,立即执行
  • setTimeout 回调进入宏任务队列(等待下一轮)
  • Promise.then 进入微任务队列
  • 同步脚本结束后,立刻执行微任务:打印 3
  • 然后取下一个宏任务:setTimeout 回调,打印 2

以上就是什么是JavaScript事件循环_宏任务与微任务执行顺序如何的详细内容,更多请关注php中文网其它相关文章!

最佳 Windows 性能的顶级免费优化软件
最佳 Windows 性能的顶级免费优化软件

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号