J*aScript事件循环_宏任务与微任务详解


J*aScript通过事件循环实现异步,宏任务(如setTimeout)执行后清空所有微任务(如Promise.then),再进入下一宏任务,确保微任务优先于渲染执行。

javascript事件循环_宏任务与微任务详解

J*aScript 是单线程语言,靠事件循环(Event Loop)实现异步操作的调度。理解宏任务(MacroTask)与微任务(MicroTask)是掌握 J*aScript 异步执行机制的关键。

事件循环的基本流程

J*aScript 引擎在执行代码时,会先运行同步代码,遇到异步任务则将其交给浏览器或 Node.js 环境处理,并注册回调函数。当异步操作完成,回调会被放入任务队列。事件循环不断检查调用栈是否为空,一旦空了,就从任务队列中取出下一个任务执行。

关键点在于:事件循环每次从宏任务队列中取一个任务执行,执行完后,立即清空当前所有的微任务队列,然后再回到宏任务队列取下一个任务。

宏任务(MacroTask)有哪些?

宏任务是事件循环中一次完整的执行单元。每个宏任务执行完毕后,浏览器可以进行渲染更新。

  • setTimeout 回调
  • setInterval 回调
  • I/O 操作
  • UI 渲染
  • script 标签整体代码(初始同步代码也被视为一个宏任务)

微任务(MicroTask)有哪些?

微任务在当前宏任务执行结束后立即执行,且会全部执行完才继续下一个宏任务。

  • Promise.then/catch/finally 回调
  • MutationObserver(DOM 变化监听)
  • queueMicrotask() API
  • process.nextTick()(Node.js 环境,优先级更高)

执行顺序:宏任务 vs 微任务

来看一个经典例子:

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,放入微任务队列
  • 当前宏任务结束,检查微任务队列,执行 then 回调输出 '3'
  • 进入下一轮事件循环,执行 setTimeout 回调输出 '2'

再看一个复杂一点的例子:

度加剪辑 度加剪辑

度加剪辑(原度咔剪辑),百度旗下AI创作工具

度加剪辑 380 查看详情 度加剪辑
console.log('start');

setTimeout(() => {
  console.log('timeout1');
  Promise.resolve().then(() => {
    console.log('promise in timeout');
  });
}, 0);

Promise.resolve().then(() => {
  console.log('promise1');
  setTimeout(() => {
    console.log('timeout in promise');
  }, 0);
});

console.log('end');

输出顺序:start → end → promise1 → timeout1 → promise in timeout → timeout in promise

分析:

  • 同步代码输出 start、end
  • 微任务:第一个 Promise.then 输出 promise1
  • 宏任务队列:第一个 setTimeout 触发,输出 timeout1
  • 此时该宏任务内部产生微任务:Promise.then 输出 promise in timeout
  • 下一轮宏任务:setTimeout 在 promise 中注册的那个触发

注意:微任务总是在当前宏任务末尾被集中执行,即使它是在 setTimeout 回调中创建的。

常见误区与注意事项

很多人误以为 setTimeout(..., 0) 就是“立刻执行”,其实它只是尽快加入宏任务队列,必须等当前所有同步和微任务完成。

微任务的高优先级意味着滥用 Promise.then 做大量计算可能阻塞渲染,因为浏览器只在宏任务之间重绘页面。

在实际开发中,若想让某些操作延迟到当前所有异步回调之后执行,可以用 queueMicrotask 或 Promise.resolve().then() 包裹。

基本上就这些。搞清楚宏任务和微任务的执行时机,就能准确预测异步代码的输出顺序。不复杂但容易忽略细节。

以上就是J*aScript事件循环_宏任务与微任务详解的详细内容,更多请关注其它相关文章!


# 有何  # 推广和seo  # 台州网站推广优化软件  # 鞍山seo外包排名前十  # seo外包赚钱吗  # 景观人物网站建设流程  # 智能网站推广软件  # 色彩营销推广文案  # seo公司16认火 星  # 单品站seo  # Seo优化计费模式  # 迭代  # 下一轮  # 清空  # 如何处理  # 如何使用  # javascript  # 它是  # 第一个  # 是在  # 回调  # 重绘  # 异步任务  #   # mac  # 回调函数  # 浏览器  # node  # node.js  # js  # java 


相关栏目: 【 Google疑问12 】 【 Facebook疑问10 】 【 优化推广96088 】 【 技术知识133117 】 【 IDC资讯59369 】 【 网络运营7196 】 【 IT资讯61894


相关推荐: 圆通快递官网入口查询单号 手机版官方查询入口  胃动力不足?试试这5个调理方法  《花瓣》创建专辑方法  《i莞家》修改昵称方法  Python中深度嵌套字典与列表的数据提取与条件过滤指南  windows10怎么设置电源按钮_windows10按下电源键功能修改  优化Google Charts Gauge:在数据库无数据时显示默认值  cad怎么隐藏指定的图层_cad隐藏或冻结图层方法  解决PHP MySQL数据库更新无响应:SQL查询语法错误解析  OpenWeatherMap API:通过城市名称获取天气预报数据指南  Win11怎么设置分辨率 Win11显示设置调整分辨率及刷新率修改  《爱笔思画x》魔棒工具抠图教程  Go反射进阶:访问内嵌结构体中的被遮蔽方法  2025考研成绩查询时间入口分享  一加 Ace 6V 快充无法启用_一加 Ace 6V 充电优化  《腾讯相册管家》注销账号方法  《360浏览器》自动保存账号密码设置方法  iSpring三分屏制作教程  抖音网页版官方链接 抖音网页版官网链接入口  发博客与长微博技巧  微信朋友圈怎么设置三天可见 微信朋友圈设置指定天数可见步骤【教程】  12306售票时间最新规定 | 网上订票和车站窗口时间一样吗  Go Template中优雅处理循环最后一项:自定义函数实践  CSS绝对定位与溢出控制:实现背景元素局部显示不触发滚动条  PHP页面重载后变量状态保持:实现用户档案连续浏览的教程  Word如何将文字快速转成表格 Word文本转换成表格功能使用技巧【效率】  firefox火狐浏览器最新官网主页_ firefox火狐浏览器平台入口直达官方链接  《三角洲行动》战斗步枪与机枪类改装代码分享  如何在vscode中关闭it环境  C++怎么解决数值计算中的精度问题_C++浮点数误差与数值稳定性分析  《王者荣耀世界》英雄获取攻略  Python实时数据流中高效查找最大最小值  三角洲行动2025年9月10日摩斯密码分享  电脑的“恢复环境(WinRE)”找不到怎么办_Windows系统恢复环境重建【高级修复】  《图怪兽》退出登录方法  电脑没有声音了怎么办 电脑声音问题的全面排查与修复指南【详解】  mysql触发器如何编写_mysql触发器编写规范与代码示例讲解  LINUX怎么查看显卡信息_LINUX查看GPU状态  申通快件单号查询平台 申通包裹物流动态跟踪  热血江湖归来医师加点攻略  windows server2019显卡驱动怎么安装_winserver2019显卡驱动安装与远程桌面优化  Linux如何开发轻量级数据服务模块_Linux服务化设计  如何查询国外邮政编码_国外邮政编码查询的多种有效途径  使用VS Code调试Python代码:从入门到精通  如何在 WordPress 前端实现内容提交:古腾堡编辑器的替代方案与实践  教育查询官方网站入口 教育个人档案查询免费官网  猫眼app抢票快还是小程序快  铁路12306买票怎么选双人铺 铁路12306卧铺分配规则说明  mysql怎么查询数据_mysql基础查询语句使用教程  windows10怎么开启wsl_windows10安装linux子系统教程 

 2025-11-22

了解您产品搜索量及市场趋势,制定营销计划

同行竞争及网站分析保障您的广告效果

点击免费数据支持

提交您的需求,1小时内享受我们的专业解答。

运城市盐湖区信雨科技有限公司


运城市盐湖区信雨科技有限公司

运城市盐湖区信雨科技有限公司是一家深耕海外推广领域十年的专业服务商,作为谷歌推广与Facebook广告全球合作伙伴,聚焦外贸企业出海痛点,以数字化营销为核心,提供一站式海外营销解决方案。公司凭借十年行业沉淀与平台官方资源加持,打破传统外贸获客壁垒,助力企业高效开拓全球市场,成为中小企业出海的可靠合作伙伴。

 8156699

 13765294890

 8156699@qq.com

Notice

We and selected third parties use cookies or similar technologies for technical purposes and, with your consent, for other purposes as specified in the cookie policy.
You can consent to the use of such technologies by closing this notice, by interacting with any link or button outside of this notice or by continuing to browse otherwise.