全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-690-7320

J*aScript事件循环_微任务与宏任务执行机制

javascript事件循环_微任务与宏任务执行机制

J*aScript 是单线程语言,通过事件循环(Event Loop)实现异步操作的管理。理解微任务与宏任务的执行机制,有助于掌握代码的实际执行顺序。

宏任务与微任务的基本概念

宏任务(Macrotask):每次事件循环中执行的一个完整任务单元,例如:

  • 整体脚本代码(script)
  • setTimeout 回调
  • setInterval 回调
  • I/O 操作
  • UI 渲染

微任务(Microtask):在当前宏任务结束后、下一个宏任务开始前立即执行的任务,包括:

  • Promise.then/catch/finally 回调
  • queueMicrotask()
  • MutationObserver(DOM 变化监听)

事件循环的执行流程

事件循环遵循以下规则:

  • 先执行同步代码
  • 遇到异步任务时,将其回调注册到对应的队列(宏任务或微任务)
  • 当前宏任务执行完毕后,立刻清空所有可执行的微任务队列
  • 微任务执行完后,进行一次可能的 UI 渲染,然后开始下一个宏任务

关键点:每个宏任务执行完后,必须清空当前所有的微任务,再进入下一个宏任务。

实际执行顺序示例

看一段典型代码来验证执行顺序:

console.log('1'); setTimeout(() => { console.log('2'); }, 0); Promise.resolve().then(() => { console.log('3'); }); console.log('4');

输出结果是:1 → 4 → 3 → 2

Docky AI Docky AI

多合一AI浏览器助手,解答问题、绘制图片、阅读文档、强化搜索结果、辅助创作

Docky AI 100 查看详情 Docky AI

解释:

  • '1' 和 '4' 是同步代码,最先输出
  • setTimeout 是宏任务,进入宏任务队列
  • Promise.then 是微任务,在当前宏任务结束后立即执行
  • 所以 '3' 在 '2' 之前输出

嵌套情况下的执行顺序

微任务可以继续产生新的微任务,这些也会在同一轮中被处理:

Promise.resolve().then(() => { console.log('A'); Promise.resolve().then(() => { console.log('B'); }); }); console.log('C');

输出为:C → A → B

因为第一个 then 是微任务,执行时又添加了一个微任务,这个新微任务会在本轮微任务队列中继续执行。

基本上就这些。只要记住:宏任务划分阶段,微任务穿插在中间且优先执行。不复杂但容易忽略细节。

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


# 会在  # 上海seo优化推广培训  # 信誉好的武汉网站推广  # 快排seo秒收录  # seo监控测评推荐公司  # 长岛全网营销推广哪家好  # 网站建设失败  # 推广营销平台哪家专业  # 营销推广化妆品文案简短  # seo快排系统如何搭建  # 山西网站网络推广哪个好  # 将其  # javascript  # 第一个  # 也会  # 结束后  # 清空  # 如何处理  # 完后  # 如何实现  # 回调  # 异步任务  # mac  # java 


相关文章: 微信网页版官方入口直达 微信网页版网页版登录使用方法  J*aScript Promise链中如何正确终止后续.then执行并处理错误  AO3官方在线访问地址 Archive of Our Own最新镜像合集  J*a递归快速排序中静态变量导致数据累积问题的解决方案  在J*a中如何开发简易仓库管理与库存统计_仓库管理库存统计项目实战解析  sublime如何处理大型CSV文件的列对齐_sublime高级表格编辑插件指南  163邮箱网页版入口导航平台 163邮箱网页版登录入口官网导航  Sublime怎么配置Nim语言环境_Sublime Nim代码高亮与补全  新三国志曹操传110级星符试炼夏侯渊极难攻略  Python实现多节点属性重叠度分析教程  必由学官方网站入口 必由学学生教师共用登录通道  美团外卖商家服务中心入口 美团商家版官网入口  漫蛙2在线漫画入口 漫蛙正版漫画网页版直达  PDO预处理语句中冒号的正确处理:区分SQL函数格式与命名占位符  React/Next.js中实现列表项的动态选择与移动  QQ邮箱官方网站登录入口_QQ邮箱网页版在线使用  处理嵌套交互式控件:前端可访问性指南  Animex动漫社网入口地址 Animex动漫社网正版在线入口  Win11怎么关闭快速启动_Win11彻底关机设置教程  抖音网页版怎么|直播|_抖音网页版开播操作指南  实现全屏滚动与导航点:专业教程  Lar*el 递归关系中排除指定分支的教程  AO3同人作品网入口 AO3搜索引擎官网永久地址  poki免费入口快捷访问 poki人气小游戏直接玩站点  win11如何卸载Windows更新补丁 Win11解决更新导致系统不稳定的问题【修复】  Lar*el Migration:重命名列后添加新列的正确操作顺序  CSS Flexbox如何实现多行排列_flex-wrap wrap自动换行显示  MongoDB聚合管道:正确匹配对象数组中_id的方法  将HTML Canvas内容转换为可上传的图像文件(File对象)  LINUX的perf命令入门_LINUX官方性能分析工具的使用与解读  如何在更新Composer依赖后自动运行测试_使用post-update-cmd钩子触发PHPUnit  LINUX下如何进行磁盘分区_fdisk与parted工具在LINUX中的使用对比  Golang如何使用buffered channel提高性能_Golang buffered channel优化技巧  实现分段式页面滚动导航:CSS与J*aScript教程  顺丰快递查询系统 官方正版查询入口  vivo浏览器怎么扫描二维码 vivo浏览器内置扫一扫功能使用方法  从OpenAI API响应中高效提取生成文本  ArchiveofOurOwn小说阅读-ArchiveofOurOwn同人作品访问链接  特斯拉自动驾驶房车计划曝光 原型车将于2027年亮相  微信网页版扫码登录入口 微信网页版二维码登录入口  Python中高效且防溢出的双曲正弦计算:基于对数空间的优化策略  AO3镜像入口大全 AO3网页版内容访问全集  拷贝漫画电脑版官网入口 拷贝漫画(PC版)在线直达  在J*a中如何使用Exception包装底层异常_异常包装与信息传递方法说明  iCloud登录入口网页版 苹果iCloud官网登录  蛙漫漫画免费阅读入口_蛙漫官方正版无广告纯净版  必由学官网快捷入口 必由学网页版在线学习平台  将PCM16音频转换为W*并编码为Base64:浏览器环境下的手动处理指南  如何使 Jest 模拟函数默认抛出错误以提高测试效率  中兴Axon42Ultra怎样在文件App筛图_iPhone中兴Axon42Ultra文件App筛图【图片筛选】 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。