老师执行下面代码,为什么输出的是1 3 5 7 2 5 7 6 6 4,而不是1 3 5 7 2 5 7 4 6 6

来源:8-17 解答JS异步的面试题

慕粉1048545496

2020-08-10

async function fn1(){
  console.log(3)
  await fn2()
  //异步
  console.log(4)
}

async function fn2(){
  console.log(5)
  await fn3()
  // 异步
  console.log(6)
}

async function fn3(){
  console.log(7)
}

console.log(1)
fn1()
console.log(2)
fn2()
//1 3 5 7 2 5 7 6 6 4
写回答

1回答

双越

2020-08-11

你就看第一个函数 fn1 ,执行 fn1 时得先把内部的 await fn2()  执行完了,最后再执行 console.log(4) ,对吧?

所以,无论怎么算,4 都是最后输出的。

0
5
双越
回复
慕仙7331728
最后执行的是 console.log(4) ,因为它在 await 后面,可以理解为异步的代码。 你觉得 fn2() 写在最后,它就是最后执行吗?错了,写在最后它也是同步代码。 同步先执行,异步再执行,这没毛病,对吧。
2021-01-20
共5条回复

一天时间高效准备前端技术一面 匹配大厂面试要求

针对时下面试高频考点,帮助新人js面试快速通关

4641 学习 · 1667 问题

查看课程