新闻中心
J*aScript事件循环_微任务与宏任务解析
宏任务先执行,微任务在宏任务后立即清空队列,async/await中await后续代码作为微任务执行,setTimeout属于宏任务延后执行。

J*aScript 是单线程语言,通过事件循环(Event Loop)实现异步操作的管理。理解微任务与宏任务的执行机制,是掌握 JS 异步编程的关键。
宏任务与微任务的基本概念
宏任务(Macrotask):每次事件循环中执行的一个完整任务单元,比如 script 全局代码、setTimeout、setInterval、I/O、UI 渲染等。
微任务(Microtask):在当前任务结束后、下一轮事件循环开始前立即执行的任务,比如 Promise.then、MutationObserver、queueMicrotask 等。
事件循环的流程是:执行一个宏任务 → 执行所有可执行的微任务 → 进入下一个宏任务。
执行顺序:微任务优先于下一个宏任务
每当一个宏任务执行完毕,JS 引擎会清空当前所有的微任务队列,再进入下一个宏任务。
这意味着即使微任务是在宏任务中间创建的,也会在该宏任务结束后立刻执行。例如:
console.log('1');
setTimeout(() => {
console.log('2');
}, 0);
Promise.resolve().then(() => {
console.log('3');
});
console.log('4');
输出顺序为:1 → 4 → 3 → 2。
- 全局 script 是第一个宏任务
- 同步代码先输出 1 和 4
- Promise 的 then 回调进入微任务队列,宏任务结束后执行,输出 3
- setTimeout 属于宏任务,进入下一轮事件循环,最后输出 2
async/await 与微任务的关系
async 函数中的 await 后续代码会被包装成微任务。
Avatar AI
AI成像模型,可以从你的照片中生成逼真的4K头像
92
查看详情
看这个例子:
async function async1() {
console.log('async1 start');
await async2();
console.log('async1 end');
}
async function async2() {
console.log('async2');
}
console.log('script start');
async1();
console.log('script end');
输出为:script start → async1 start → async2 → script end → async1 end。
- async1 执行输出 'async1 start'
- await 调用 async2,其内部同步代码执行,输出 'async2'
- await 后面的代码被包装成微任务,所以 'async1 end' 在当前宏任务结束后才执行
常见误区与注意事项
很多人误以为 setTimeout(fn, 0) 会立即执行,实际上它只是将回调加入下一个宏任务队列,必须等待当前所有微任务完成。
微
任务执行时机非常“紧迫”,适合用于需要尽快响应的操作,如 Promise 链式调用、状态变更通知等。
避免在微任务中无限递归,比如连续调用 queueMicrotask,可能导致主线程阻塞,无法进行 UI 渲染或其他异步操作。
基本上就这些。搞清楚宏任务和微任务的层级关系,就能准确预测 JS 代码的执行顺序。不复杂但容易忽略细节。
以上就是J*aScript事件循环_微任务与宏任务解析的详细内容,更多请关注其它相关文章!
# 下一轮
# 宁河区如何营销推广
# 专注网站建设价钱
# 只做sem不做seo
# 厦门网站建设磐石网络
# 大同市营销推广哪个靠谱
# 湖北官网seo排名
# 视野seo推广
# 西宁市网站建设及推广
# seo我爱自学
# 网站制作及优化报价模板
# 第一个
# 是在
# 微任务宏任务
# 清空
# 源代码
# 回调
# 链式
# 结束后
# 是怎样
# 递归
# ai
# mac
# js
# java
# javascript
相关栏目:
【
科技资讯46185 】
【
网络学院92790 】
相关推荐:
一加 14R 快充无反应_一加 14R 充电优化
手机屏幕碎了但能正常使用怎么办 手机外屏碎裂的修复建议
漫蛙2在线漫画入口 漫蛙正版漫画网页版直达
今日头条怎么同步内容到抖音_今日头条内容同步到抖音教程
Eclipse怎么运行工程_Eclipse工程运行配置说明
“在文档元素之后找到了标记”是什么错误? 检查并修复XML中多个根元素的3个方法
铁路12306卧铺选择攻略 铁路12306下铺座位预定技巧
快手极速版在线观看 官方网页版登录地址
聚水潭ERP登录页面入口 聚水潭ERP官网登录界面
126邮箱手机版登录官网2026_126手机邮箱免费入口最新
Win11怎么安装Linux子系统 Win11 WSL2安装Ubuntu及环境配置指南
将HTML动态表格多行数据保存到Google Sheet的教程
Golang如何优化内存分配与垃圾回收_Golang内存管理与GC优化实践
AWS EC2实例间SQL Server连接超时:安全组配置与故障排除指南
将HTML Canvas内容转换为可上传的图像文件(File对象)
高德地图家和公司地址在哪设置 高德地图通勤路线设置方法【超详细】
Golang如何通过reflect获取匿名字段方法_Golang reflect匿名字段方法访问技巧
CKEditor 5 自定义构建在React应用中渲染失败的调试与解决
菜鸟取件码是什么怎么查 最全查询渠道汇总
动漫花园资源网使用步骤_动漫花园资源网下载流程
Node.js中HTML按钮与J*aScript函数交互的正确姿势
AO3最新官网入口公告_2025AO3镜像站实时查询方法
印象笔记如何设离线包出差查阅_印象笔记设离线包出差查阅【离线阅读】
Golang如何使用net/url解析URL_Golang URL解析与处理方法
想当下一个《2077》?《心之眼》Steam评价升至"多半好评"
cad如何更改注释性对象的比例_cad注释性比例调整方法
Node.js CSV 数据处理:基于字段值条件过滤整条记录的策略
Excel函数批量查找替换超快方法_Excel用REPLACE和FIND函数秒级替换
如何将HTML表格多行数据保存到Google Sheet
Yandex免登录官网入口_俄罗斯Yandex搜索引擎直达链接
多闪网页版在线观看免费入口_多闪官网访问入口
星露谷物语官网入口 星露谷物语游戏官网入口
sublime怎么进行远程开发编辑_配置rsub/rmate实现sublime编辑服务器文件
Win10双系统截图高效法 截屏快捷键速记【技巧】
正确连接J*aScript到HTML实现可点击图片与自定义事件处理
Golang切片为何属于引用类型_Golang slice底层结构与引用语义说明
J*aScript中高效管理与清空动态列表:避免循环陷阱
QQ邮箱网页版入口页面 QQ邮箱在线登录入口官网
荣耀Play7T运行卡顿解决_荣耀Play7T性能优化
妖精动漫免费平台 妖精动漫官网资源观看网址
抖音隐秘迷城小游戏入口_ 抖音冒险解谜小游戏秒玩
Django AJAX 文件上传教程:解决图片无法保存到模型的常见问题
Python字典中优雅地迭代剩余元素的方法
Go语言中对Map值调用带指针接收者方法:原理与最佳实践
Sublime Text怎么显示空格和制表符_Sublime显示不可见字符设置
vivo手机互传视频怎么操作_vivo手机互传视频详细传输方法
解决macOS上安装pyhdf时‘hdf.h’文件缺失的编译错误
Composer中的^和~符号代表什么_精通Composer版本号语义化约束
小米14应用无法联网原因分析_小米14网络权限修复
MAC怎么让Dock栏只显示当前运行的应用_MAC终端命令实现极简Dock栏


2025-11-24
浏览次数:次
返回列表