宏任务(macrotask )和微任务(microtask )是异步任务的两种分类。
在挂起任务时,JS 引擎会将所有任务按照类别分到这两个队列中,首先在 macrotask 的队列(这个队列也被叫做 task queue)中取出第一个任务,执行完毕后取出 microtask 队列中的所有任务顺序执行;之后再取 macrotask 任务,周而复始,直至两个队列的任务都取完。
![](https://img-blog.csdnimg.cn/img_convert/5e76fdbfb8e46ea91315f7e32d8338dd.png)
宏任务和微任务之间的关系
![](https://img-blog.csdnimg.cn/img_convert/6ee471f5d14d59458a3168d64fc61807.png)
宏任务:由宿主(Node、浏览器)发起,后运行,会触发新一轮Tick
setTimeout、setInterval、setImmediate、requestAnimationFrame(node不支持)
微任务:由JS引擎发起,先运行,不会触发新一轮Tick
process.nextTick(浏览器不支持)、MutationObserver(node不支持)、Promise .then catch finally