微任务和宏任务

同步异步

首先,我们要先了解下 Js 。js 是一种单线程语言,简单的说就是:只有一条通道,那么在任务多的情况下,就会出现拥挤的情况,这种情况下就产生了 ‘多线程’ ,但是这种“多线程”是通过单线程模仿的,也就是假的。那么就产生了同步任务和异步任务。

  • 同步任务:同步任务不需要进行等待,必须立即看到执行结果,比如console log
  • 异步任务:异步任务需要等待一定的时候才能看到结果,比如setTimeout、网络请求

微任务和宏任务

宏任务和微任务都是异步任务.最开始的时候只有宏任务,但是后来程序猿发现异步任务全部排队一个一个执行也不太好,因为就算是异步任务里面也有一些代码更重要需要先执行,就是说它要插队.这个时候就有了微任务.

然后代码执行顺序发生改变

-   先执行同步代码
-   遇到宏任务,放入队列
-   遇到微任务,放入微任务队列
-   执行栈为空
-   -   将微任务入栈执行
-   所有的微任务完成之后,取出宏任务队列来执行

image.png

只要有微任务就先执行微任务

下面列举常用的的宏任务和微任务。

任务(代码)宏/微 任务环境
script宏任务浏览器
事件宏任务浏览器
网络请求(Ajax)宏任务浏览器
setTimeout() 定时器宏任务浏览器 / Node
fs.readFile() 读取文件宏任务Node
Promise.then()微任务浏览器 / Node