Open H246802 opened 5 years ago
setTimeout(() => {
// a
console.log(4)
}, 0)
new Promise(resolve => {
// b
console.log(1)
for (var i = 0; i < 10000; i++) {
i == 9999 && resolve()
}
// c
console.log(2)
}).then(() => {
// d
console.log(5)
Promise.resolve(7)
// e
.then(v => console.log(v))
}).then(() => {
// f
console.log(6)
})
// g
console.log(3)
/*
a
setTimeout 设定的计时器,函数会被添加到 event loop 中,
只有主线程的任务完成以后,才会执行,所以会最后打印 4
b
js 解释器开始顺序执行代码,开始打印 1
c
当 for 循环中的循环变量自增到 9999,
会将 promise 对象的状态由 pending 变更为 fullfilled,
但 console.log(2) 仍要先于 resolved 的回调函数执行,
所以会打印 2,
g
resolve 状态下的回调函数会异步执行,
所以此时会执行 g 同步操作,打印 3
d
异步,resolved 状态下的回调函数开始执行,打印 5,
e
而此时,有一个新的 promsie 对象,
状态立即由 pending 变更为 fullfilled 的,
resolved 状态下的回调函数会立即执行,打印 7
f
第一个 then 的回调函数执行完毕后,
开始执行第二个 then 的回调函数,
即执行 f 操作,打印 6
所以,最后的顺序是
1,2,3,5,7,6,4
*/
以下代码输出什么?为什么?