微任务和宏任务的区别是什么?

本文介绍了JavaScript中的宏任务和微任务的概念及其执行顺序。宏任务包括主代码块、定时器等,而微任务则是在当前宏任务执行结束后、下一个宏任务开始前执行,如Promise回调。JS执行顺序遵循先执行宏任务,然后处理微任务队列的规则。文章还详细阐述了事件循环的运行机制,并列举了各类任务实例进行说明。

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

在这里插入图片描述

概念:
1. 宏任务:当前调用栈中执行的代码成为宏任务。(主代码快,定时器等等)。
2.微任务: 当前(此次事件循环中)宏任务执行完,在下一个宏任务开始之前需要执行的任务,可以理解为回调事件。(promise.then,proness.nextTick等等)。 3. 宏任务中的事件放在callback queue中,由事件触发线程维护;微任务的事件放在微任务队列中,由js引擎线程维护。

js执行顺序,(先执行宏任务列再是微任务队列)

例子1:

for(var i=0;i<10;i++){
setTimeout(function(){
    console.log(i)
},0)
}

输出 10个10
‘-------------------------------------------------------------------------------’
2,加立即执行函数

分析:尽管循环执行结束,i值已经变成了3。但因遇到了自执行函数,当时的i值已经被 lockedIndex锁住了。也可以理解为 自执行函数属于for循环一部分,每次遍历i,自执行函数也会立即执行。所以尽管有延时器,但依旧会保留住立即执行时的i值。
for(var i=0;i<10;i++){
    (function(i){
   setTimeout(function(){
       console.log(i)
   },0)
})(i)
}

输出 正常 i 值序号

运行机制:
1. 在执行栈中执行一个宏任务。
2. 执行过程中遇到微任务,将微任务添加到微任务队列中。
3. 当前宏任务执行完毕,立即执行微任务队列中的任务。
4. 当前微任务队列中的任务执行完毕,检查渲染,GUI线程接管渲染。
5. 渲染完毕后,js线程接管,开启下一次事件循环,执行下一次宏任务(事件队列中取)。
微任务:process.nextTick、MutationObserver、Promise.then catch finally
宏任务:I/O、setTimeout、setInterval、setImmediate、requestAnimationFrame
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值