前端面试题(关于执行循序)

68 阅读1分钟

先看题目: 请输出以下代码的打印顺序

function a() {
        console.log(1)
        Promise.resolve().then(function () {
          console.log(2)
        })
      }
      setTimeout(function () {
        console.log(3)
      }, 0)
      Promise.resolve(3).then(a)

如何快速且正确得得出这类题目的答案,我来分享一个方法:

首先:你要清楚3个分类,分别是:

主线程

微队列(promise)

延迟队列 (setTimeout)

他们的执行优先级是:主线程 > 微队列 > 延迟队列

了解了这个后,就可以对代码进行分析了,为了方便说明,fn指console.log(n),我们通过执行优先级进行排队:

  1. 作为主线程的f(5)排在第1位
  2. 作为微队列promise排在第2位
  3. 作为setTimeout的延迟队列f(3)排在第3位

按照队列一个个执行(js是单线程的),首先是主线程的f5,打印5,接下来是微队列promise,即f(a),打印出1和2,最后执行延迟队列setTimeout,打印出3

最后的打印结果是: 5123

同类题目都可以使用这个方法进行分析,屡试不爽