首页 > 试题广场 >

下列代码的运行输出结果是? 

[单选题]
下列代码的运行输出结果是? 

  • 1 2 7 5 6 3
  • 7 1 2 5 6 3
  • 1 2 3 4 6 7
  • 1 2 7 4 6 3
答案:A:1 2 7 5 6 3
这里涉及到微观任务和宏观任务,JavaScript首先执行主线程上的所有代码,等主线程的代码都执行完了再执行异步代码。异步代码分为宏观任务(setTimeout)、微观任务(Promise),微观任务的优先级比宏观任务大,所以他们的调用顺序是 微观任务 -> 宏观任务。回到本题:
不难看出1 2 7 都是运行在主线程上,所以先输出 1 2 7 。主线程代码执行完毕后执行微观任务(promise),第一个promise应该是p,所以 输出 5,再到 first(), 输出 6。所有微观任务执行完毕,再执行宏观任务(setTimeout),最后输出 3 。而 setTimeout 中的 resolve(4) 为什么不会输出?因为每个 promise 只会执行一次 resolve 函数,之前已经执行过了,所以不会再调用这个 resolve 函数了。
编辑于 2020-09-04 16:26:03 回复(0)