JavaScript 的事件循环(Event Loop)是其异步编程的核心机制,它通过微任务(Microtasks)和宏任务(Macrotasks)来管理代码的执行顺序。
setTimeout, setInterval, setImmediate (Node.js), I/O 操作, UI 渲染, 事件回调等Promise.then/catch/finally, process.nextTick (Node.js), MutationObserver 等console.log('script start'); // 同步代码,宏任务
setTimeout(function() {
console.log('setTimeout'); // 宏任务
}, 0);
Promise.resolve().then(function() {
console.log('promise1'); // 微任务
}).then(function() {
console.log('promise2'); // 微任务
});
console.log('script end'); // 同步代码,宏任务
// 输出顺序:
// script start
// script end
// promise1
// promise2
// setTimeout
// 微任务嵌套示例
Promise.resolve().then(() => {
console.log('微任务1');
Promise.resolve().then(() => {
console.log('嵌套微任务');
});
}).then(() => {
console.log('微任务2');
});
// 输出顺序:
// 微任务1
// 嵌套微任务
// 微任务2
理解事件循环、微任务和宏任务的执行顺序对于编写正确的异步代码和避免潜在问题非常重要。
热门推荐:
0