JS的执行顺序

微任务:Promise 、 process 、 nextTick

宏任务:整体代码script 、setTimeout 、 setInterval

通过代码来解释:

setTimeout( ()=>{ console.log("timeout") })

new Promise( (resolve, reject)=>{ 
	console.log("promise") 
    resolve()
})
.then( ()=>{ console.log("then") })

console.log("同步")

上面的代码中一共有4次console.log(),它们的打印顺序就遵照上图,执行顺序如下:

  1. 开始执行,遇到setTimeout(),将此任务插入到宏任务队列,进行下一步
  2. 遇到Promise,Promise的第一部分是同步操作,.then()中才是异步操作,所以console.log(“promise”)被执行,进行下一步
  3. 遇到.then(),将此任务插入到微任务队列中,进行下一步
  4. 遇到同步操作的console.log(“同步”),直接执行
  5. 主线程第一次执行完毕,要开始进行问询,但是在问询之前必须清空微任务队列,所以要先进行微任务队列的检查
  6. 发现微任务队列中还有一个.then()任务,执行.then()中的操作,console.log(“then”)被执行
  7. 再次检查微任务队列是否清空,已清空,开始问询,无异步操作
  8. 开始执行宏任务队列中任务,console.log(“timeout”)

你可能感兴趣的:(js执行顺序,js)