那些年我怨种同桌遇到的bug②

怨种同桌今天又突然call我问问题了,题目如下:

问以下代码的执行结果是什么?

console.log(1)
setTimeout(function() {
  console.log(2)
  new Promise(function(resolve) {
    console.log(3)
    resolve()
  }).then(function() {
    console.log(4)
  })
})

new Promise(function(resolve) {
  console.log(5)
  resolve()
}).then(function() {
  console.log(6)
})
setTimeout(function() {
  console.log(7)
  new Promise(function(resolve) {
    console.log(8)
    resolve()
  }).then(function() {
    console.log(9)
  })
})
console.log(10)

答案是:1,5,10,6,2,3,4,7,8,9

分析如下:

首先要知道执行顺序是 同步代码 => 微任务 => 宏任务

微任务和宏任务的分类如下:

任务(代码)宏/微 任务环境
script宏任务浏览器
事件宏任务浏览器
网络请求(Ajax)宏任务浏览器
setTimeout() 定时器宏任务浏览器 / Node
fs.readFile() 读取文件宏任务Node
Promise.then()微任务浏览器 / Node

注意new Promise()是同步代码,Promise.then()才是微任务
第一步执行同步代码 console.log()&new Promise()
所以首先执行了1,5,10
new Promise()的状态都是resolved所以then会执行故执行6
定时器是宏任务,放在最后执行2,3,4,7,8,9

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值