setTimeout(() => {console.log(1)}, 0);new Promise((r)=>{console.log(2)r()console.log(3)}).then(()=>{console.log(4)})console.log(5)
解析执行过程
- 开始执行遇到setTimeout会丢进宏任务中去
- 遇到new Promise时打印 2 然后 遇到 r 的then丢进微任务,往下执行 打印 3
- 最后打印5,主线程就全部跑完。
- 然后执行微任务 打印 4 ,微任务也全部跑完
- 接下来执行宏任务setTimeout 打印 1
所以结果为: 2、3、5、4、1
js中分为主线程、微任务、宏任务,其中(微任务、宏任务)属于异步执行
js解析器执行过程
执行顺序为:主线程 => 微任务 => 宏任务
会先将属于主线程的代码全部执行完成,遇到微任务和宏任务的代码会丢进去,将主线程执行完成后在回来调用微任务,将微任务全部执行完成,最后在调用宏任务代码
主线程
微任务
常见微任务有:
