本文主要为大家介绍一下js中的EventLoop,其实也就是宏任务和微任务的使用方式
一、宏任务、微任务的定义
js在执行代码的时候分为同步任务,异步任务,而异步任务又可以分为宏任务、微任务
其实我理解的EventLoop主要就是指代码的执行顺序,或者说执行方法是循环的,即先执行微任务,在执行宏任务
宏任务主要包括DOM事件,setInterval,setTimeout,new promise,postMessage,ajax请求
微任务主要是包括promise.then,process.nextTick
二、宏任务微任务的示例
console.log(1);
setTimeout(()=>{
console.log(2);
},0)
new Promise((res,rej)=>{
console.log(3);
res()
}).then(function(){
console.log(4);
})
console.log(5);
//1 3 5 4 2
接下来我们仔细的分析一下这段代码,注意一直秉承着微任务先于宏任务
第一句console.log(1)作为同步任务,直接执行,打印1
第二句setTimeout作为异步任务中的宏任务,移入Event Table,之后被转移进Event Queue
第三句new promise作为同步,直接执行,内部打印3,又遇到了promise.then的调用,但是由于promise.then是作为异步任务,移入Event Table,之后被转移进Event Queue
第四句,打印5
----------------------------------到此为止同步任务全部完成-------------------------
当同步任务结束之后,去Event Queue中调用异步任务,先执行微任务在执行宏任务,所以先执行promise.then,打印4.在执行setTimeout,打印2
我们通过一个简单的例子能够区分出同步任务、异步任务,宏任务微任务之间的关系了吧。