新闻中心
J*aScript事件循环_微任务与宏任务
J*aScript通过事件循环协调异步操作,宏任务(如setTimeout)执行后会清空微任务队列(如Promise回调),导致微任务优先于下一轮宏任务执行,影响代码执行顺序与性能。

J*aScript 是单线程语言,所有任务都在一个主线程上执行。为了协调代码的执行顺序,尤其是异步操作,J*aScript 引入了事件循环(Event Loop)机制。事件循环的核心是管理宏任务(Macrotask)和微任务(Microtask),并决定它们的执行顺序。
宏任务与微任务的区别
在 J*aScript 中,任务分为两类:宏任务和微任务。
宏任务包括:
- 整体 script 代码
- setTimeout 回调
- setInterval 回调
- I/O 操作
- UI 渲染
微任务包括:
- Promise.then/catch/
finally 回调 - MutationObserver 回调
- queueMicrotask()
- process.nextTick(Node.js 环境)
关键区别在于:每个宏任务执行完后,会清空当前所有的微任务队列,然后再执行下一个宏任务。
事件循环执行流程
事件循环的工作方式如下:
- 从宏任务队列中取出一个任务执行。
- 执行过程中遇到微任务,将其加入微任务队列。
- 当前宏任务执行完毕后,立即清空微任务队列中的所有任务。
- 检查是否有新的宏任务,重复上述过程。
这意味着微任务总是在当前宏任务结束后、下一个宏任务开始前被集中处理。
实际例子说明执行顺序
看下面这段代码:
Kreado AI
Kreado AI是一个多语言AI视频创作平台,只需输入文本或关键词,即可创作真实/虚拟人物的多语言口播视频。 为创作者提供AI赋能
182
查看详情
console.log('script start');
setTimeout(() => {
console.log('setTimeout');
}, 0);
Promise.resolve().then(() => {
console.log('promise1');
}).then(() => {
console.log('promise2');
});
console.log('script end');
输出结果为:
script start script end promise1 promise2 setTimeout解释:
- “script start” 和 “script end” 属于同步代码,最先输出。
- setTimeout 是宏任务,进入宏任务队列等待。
- Promise 的 then 是微任务,进入微任务队列。
- 当前 script 宏任务执行完后,清空微任务队列,输出 promise1 和 promise2。
- 下一轮事件循环取出 setTimeout 回调执行。
注意嵌套与性能影响
微任务会在当前宏任务结束后立即执行,如果在微任务中不断创建新的微任务,会导致微任务队列无法清空,阻塞后续宏任务(如页面渲染),造成界面卡顿。
例如:
let count = 0; function recursivePromise() { Promise.resolve().then(() => { count++; console.log(count); recursivePromise(); }); } recursivePromise();这会持续占用主线程,相当于“微任务死循环”,应避免此类写法。
基本上就这些。理解宏任务和微任务的执行时机,有助于写出更可靠的异步逻辑,也能更好排查执行顺序问题。
以上就是J*aScript事件循环_微任务与宏任务的详细内容,更多请关注其它相关文章!
# 如何处理
# 开封行业网站建设价格
# 珠海网络营销推广代运维
# 旅游网站怎么做推广营销
# seo推广设计方案分类
# 嘉兴网站优化哪家有实力
# seo基础怎么做
# 小餐饮推广营销
# 益阳网站建设ppt
# seo只要包含
# 黑龙江企业网站建设团队
# 是一个
# 下一轮
# 多语言
# 微任务与宏任务
# 完后
# 是怎样
# 首次
# 清空
# 回调
# 关键词
# 区别
# mac
# node
# node.js
# js
# java
# javascript
相关栏目:
【
科技资讯46185 】
【
网络学院92790 】
相关推荐:
Go与Ruby之间实现AES加密互通:CFB模式下的密钥长度匹配策略
163邮箱注册官网 免费申请163个人邮箱
如何在 Excel Online 和 Google 表格中更改日期格式
如何仅使用CSS更改登录界面背景图像图标的颜色
创客贴用户入口官网登录 创客贴网页版电脑版系统
MAC如何安全彻底地删除文件_MAC使用终端命令确保文件无法被恢复
优化Log4j2控制台输出性能:解决异步日志瓶颈
163邮箱网页版入口导航平台 163邮箱网页版登录入口官网导航
Lar*el如何生成PDF或Excel文件_Lar*el文档导出工具与使用教程
妖精动漫免费平台 妖精动漫官网资源观看网址
PHP高效扁平化嵌套数组:使用array_merge与数组解包操作符
2026年发布! 美少女养成动作RPG《神剑少女战记》发布实机演示
Windows10怎么开启存储感知 Windows10系统设置自动清理临时文件释放C盘空间【教程】
Yandex搜索引擎官方地址 俄罗斯网络世界的主要入口
c++ 命名空间怎么用 c++ namespace使用指南
学习通网页版快速入口 学习通官网网页版直接打开
J*a应用集成GitHub CLI与API认证指南
Go语言中JSON数据解码与字段访问指南
cad怎么合并重叠的线段_cad清理重复重叠线条的操作方法
台积电1.4nm工艺A14瞄准2028:10年来性能提升80%
优化Django表单:提交验证失败后保留用户输入
黑猫投诉统一入口官网 消费者权益保护投诉平台
理解Python模块与全局变量的作用域管理
AO3镜像入口大全 AO3网页版内容访问全集
Golang如何实现Web文件静态资源服务器_Golang静态资源服务器开发与实践
Yandex搜索引擎官网入口_俄罗斯Yandex免登录一键直达
C++的std::forward_list怎么用_C++ STL中单向链表容器的特点与应用
一加手机电池耗电快怎么办_一加手机电池耗电快的解决方法
qq游戏大厅官方下载_qq游戏免费下载安装入口
谷歌浏览器最新官方入口链接 谷歌浏览器网页版官网导航
Win10系统服务哪些可以禁用 Win10安全优化服务列表【干货】
58动漫网在线官方网 58动漫网正版动漫入口网址
2026春节假期时间安排 2026春节假日查询
MAC怎么让Dock栏只显示当前运行的应用_MAC终端命令实现极简Dock栏
PHP中SSG-WSG API的AES加密实践:正确使用初始化向量
KFC套餐升级怎么获取优惠代码_KFC套餐升级活动与优惠代码获取方法
抖音从哪里进入网页版_抖音官方入口链接
三星GalaxyZFold5怎样在相册制作折叠屏分镜_iPhone三星GalaxyZFold5相册制作折叠屏分镜【创意编辑】
J*a TimerTask文件监控:HashMap状态管理与常见陷阱规避指南
Go语言中动态执行代码字符串的策略与实践
4399体育竞技小游戏_4399小游戏赛事入口
4399网页游戏电脑版全新入口 4399电脑端在线玩指南
修复二维数组索引越界异常:一维循环到二维坐标的正确映射
C++如何打印当前代码行号与文件名_C++预定义宏FILE与LINE的使用
12306几点到几点不能订票? | 官方最新系统维护时间全解析
极速漫画官方主页网址 极速漫画漫画在线浏览官网链接
AngularJS $http POST请求数据传递与Go后端接收实践
电脑IP地址怎么查 查看本机IP地址的几种方法
京东单号查询入口_京东快递订单追踪入口
Sublime Text怎么设置垂直标尺_Sublime配置Rulers规范代码长度


2025-11-26
浏览次数:次
返回列表
finally 回调