1.机制如下:
![](https://i-blog.csdnimg.cn/blog_migrate/1430b93a5d3066ecd4554077fc8b29eb.jpeg)
![](https://i-blog.csdnimg.cn/blog_migrate/6bef8c86f86be1dda2e01624a9d8e0a8.jpeg)
注意一点:
宏任务需要多次事件循环才能执行完,微任务是一次性执行完的;
2.宏任务macrotask:
(事件队列中的每一个事件都是一个macrotask)
优先级:主代码块 > setImmediate > MessageChannel > setTimeout / setInterval
比如:setImmediate指定的回调函数,总是排在setTimeout前面
3.微任务包括:
优先级:process.nextTick > Promise > MutationObserver
4.举个栗子:
(1)下面这个代码输出结果是什么?(先不要看下面的答案,自己想一想)
![](https://i-blog.csdnimg.cn/blog_migrate/f420b36dca471b906837b3df4abafc5c.jpeg)
(2)揭晓答案:
主程序和和settimeout都是宏任务,两个promise是微任务
第一个宏任务(主程序)执行完,执行全部的微任务(两个promise),再执行下一个宏任务(settimeout),所以结果为:
![](https://i-blog.csdnimg.cn/blog_migrate/c938ff1862f39ae94cbe00152872ad80.jpeg)