js的微任务和宏任务

Posted 明明一颗大白菜

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了js的微任务和宏任务相关的知识,希望对你有一定的参考价值。

1.机制如下:

技术图片
技术图片

注意一点:

宏任务需要多次事件循环才能执行完,微任务是一次性执行完的;

 

 

 

2.宏任务macrotask:

(事件队列中的每一个事件都是一个macrotask)

优先级:主代码块 > setImmediate > MessageChannel > setTimeout / setInterval

比如:setImmediate指定的回调函数,总是排在setTimeout前面

 

 

 

3.微任务包括:

优先级:process.nextTick > Promise > MutationObserver

 

 

 

 

4.举个栗子:

(1)下面这个代码输出结果是什么?(先不要看下面的答案,自己想一想)

技术图片

(2)揭晓答案:

主程序和和settimeout都是宏任务,两个promise是微任务

第一个宏任务(主程序)执行完,执行全部的微任务(两个promise),再执行下一个宏任务(settimeout),所以结果为:

技术图片

以上是关于js的微任务和宏任务的主要内容,如果未能解决你的问题,请参考以下文章

js的微任务和宏任务

JS同步任务与微任务和宏任务

详解队列在前端的应用,深剖JS中的事件循环Eventloop,再了解微任务和宏任务

JavaScipt 中的事件循环机制,以及微任务 和宏任务的概念

微任务和宏任务的区别及具体场景

微任务和宏任务的区别及具体场景