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”)
console.log()顺序:promis->同步->then->timeout
setTimeout(()=>{
      console.log("timeout1")
      new Promise((resolve,reject)=>{
        console.log("p2")
        resolve()
      }).then(()=>{
        console.log("then2")
      })
    })
    new Promise((resolve,reject)=>{
      console.log("promise1")
      resolve()
    }).then(()=>{
      console.log("then1")
      setTimeout(()=>{
        console.log("time2")
      })
    })
    console.log("同步1")
再复杂一点,顺序:promise1->同步1->then1->timeout1->p2->then2->time2
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值