微任务和宏任务自我理解

236 阅读1分钟

js是一种单线程语言,简单的说就是一条通道,多任务的情况下,就会出现拥挤的情况,这种情况发生了‘多线程’,但是这种‘多线程’是通过单线程模仿的,也即是假的,那么就产生了同步任务和异步任务。

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

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

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

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

snipaste20220520_230419.jpg

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

下面举例常用的宏任务和微任务

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