/* 执行顺序 */
// 同步主线程 => 异步线程 => 微任务 => 宏任务 => 宏任务里再循环 => 微任务 => 宏任务
/* 关键理解 */
// promise是同步的 只有resolve出去的值才是异步的
// promise 是微任务
// setTimeout ajax异步回调 是宏任务
/* 简单实例1 */
setTimeout(function () {
console.log('1') // 宏任务
}, 0)
Promise.resolve()
.then(function () {
console.log('2') // 微任务1
})
.then(function () {
console.log('3') // 微任务2
})
console.log('4') // 同步
// 参照执行顺序和关键理解 明显是 4 2 3 1
/* 复杂实例2 */
setTimeout(() => {
console.log(2) // 宏任务1
Promise.resolve().then(() => {
console.log(3) // 宏任务中的微任务3
})
})
new Promise((resolve, reject) => {
console.log(4) // 同步1
resolve(5) // 微任务1
}).then((data) => {
console.log(data) // 微任务2
})
setTimeout(() => {
console.log(6) // 宏任务2
})
console.log(7) // 同步2
// 参照执行顺序和关键理解 可以得出 4 7 5 undefined 2 3 6