事件循环
- JavaScript代码执行机制
- 所有同步任务都在主线程的栈中执行
- 主线程之外,还存在一个任务队列。当异步任务有了运行结果,就会在任务队列中放置一个事件。
- 当栈中的所有同步任务执行完毕,系统就会读取任务队列,选择出需要首先执行的任务(由浏览器决定)
- 宏任务与微任务
- MacroTask(宏任务): setTimeout, setInterval, requestAnimationFrame, I/O
- MicroTask(微任务):process.nextTick, Promise.then, Object.observe, MutationObserver
- 优先级: 同步任务 > 微任务 > 宏任务
console.log(1)
setTimeout(
() => {
console.log(2)
}
, 0)
new Promise((resolve, reject) => {
console.log(3)
resolve()
}).then(() => {
console.log(4)
})
console.log(5)
console.log(1)
setTimeout(() => {
console.log(2)
new Promise((resolve) => {
console.log(3)
resolve()
}).then(() => {
console.log(4);
})
}, 0)
new Promise((resolve) => {
console.log(5);
resolve()
}).then(() => {
console.log(6);
})
setTimeout(() => {
console.log(7)
new Promise((resolve) => {
console.log(8)
resolve()
}).then(() => {
console.log(9);
})
console.log(10);
}, 0)
console.log(11);