宏任务与微任务

本文通过超现实的核桃比喻解释了JavaScript中的宏任务和微任务。宏任务如同核桃壳,包含着微任务,如核桃仁。宏任务包括script、setTimeout、setInterval等,由宿主发起;微任务如Promise、MutationObserver,由JS引擎发起,在每次宏任务执行完渲染前执行。理解这一执行机制对于优化JavaScript性能至关重要。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

可以用一个超现实的例子来形容:宏任务是一个核桃壳,那微任务就是这个核桃壳里的仁.为什么说这是超现实的例子呢?因为你吃完这些核桃仁可能会发现里面竟然还有一个或多个核桃,甚至循环往复.

常见的宏任务: 整个代码块(script), setTimeout, setInterval

为什么说这些是宏任务?因为它就像核桃壳一样,里面是必定有核桃仁(或者下一个核桃)的.

而微任务(也就是吃核桃仁)在什么时候执行呢?就是擦嘴巴(渲染)前执行.每个宏任务执行完后准备执行下一个宏任务前必定要渲染, 这个条理性是必然的, 就好像吃完东西必须擦嘴巴一样.

 相信看了上面的例子, 理解这张图已经是易如反掌.

如何区分宏任务与微任务?

宏任务是由宿主(Node,浏览器)发起的, 常见具体事件有:

1. script (可以理解为外层同步代码)
2. setTimeout/setInterval
3. UI rendering/UI事件
4. postMessage,MessageChannel
5. setImmediate,I/O(Node.js)

微任务是由js引擎发起的, 常见具体事件有:

1. Promise
2. MutaionObserver
3. Object.observe(已废弃;Proxy 对象替代)
4. process.nextTick(Node.js)

本文参考https://segmentfault.com/a/1190000020889508

感谢博主!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值