BFE.devAI解答 - JavaScript 小测验
1. Promise order
输出结果为:
1
2
3
4
7
5
6
9
8
解释:
console.log(1)
:首先输出数字1。const promise = new Promise((resolve) => {
:创建一个新的Promise对象。这个Promise会立即被执行。console.log(2)
:输出数字2。resolve()
:Promise对象的状态被设置为“已解决”。console.log(3)
:输出数字3。console.log(4)
:输出数字4。console.log(7)
:输出数字7。promise.then(() => { console.log(5) })
:Promise对象的状态已经被解决,所以这个then方法会立即被执行。输出数字5。.then(() => { console.log(6) })
:链式调用了另一个then方法,输出数字6。setTimeout(() => { console.log(8) }, 10)
:将要在10毫秒(0.01秒)钟之后输出数字8。setTimeout(() => { console.log(9) }, 0)
:将要在下一个“tick”(下一轮事件循环)之后输出数字9。即:当前的JavaScript代码执行完毕之后,浏览器会先执行队列中现有的“微任务”,然后再执行队列中现有的“宏任务”。由于定时器的代码是一个“宏任务”,所以它可能不会在第6步输出数字6之前运行。