微任务microtask:Promise、async/await
宏任务macrotask:setTimeout,setInterval,DOM事件,AJAX请求,DOM渲染
结论:微任务比宏任务执行时机早; 微任务>DOM渲染>宏任务
console.log(1)
Promise.resolve().then(()=>{
console.log(2)
})
setTimeout(()=>{
console.log(3)
},0)
console.log(4)
//执行顺序为:1,4,2,3
event Loop(事件循环):
是一个执行模型,在不同的地方有不同的实现。浏览器和NodeJS基于不同的技术实现了各自的Event Loop。
- event Loop:开始的时候,会从全局一行一行的执行,遇到函数调用,会压入到调用栈中,被压入的函数被称为帧,当函数返回后会从调用栈中弹出
- 消息队列:是暂时存放异步任务的地方,等同步代码执行完毕以后,EventLoop会从消息队列中一次取出异步任务放到调用栈再次执行