JS执行原理大揭秘:事件循环Event Loop与宏任务、微任务
JavaScript执行环境中的事件循环(Event Loop)是一个处理异步操作的机制。它主要有两个阶段:宏任务(Macro Task)和微任务(Micro Task)。
宏任务(Macro Task)通常包括:
- 整体的脚本程序(全部同步代码)
- setTimeout 和 setInterval 的回调函数
- I/O 操作等
微任务(Micro Task)通常包括:
- Promise 的回调函数
- Object.observe(已废弃)
- MutationObserver(HTML5新特性)
- process.nextTick(Node.js 环境)
事件循环的运行顺序如下:
- 执行同步代码,构造宏任务和微任务队列。
- 同步代码执行完毕,执行所有微任务。
- 执行宏任务中的一个,即 setTimeout 和 setInterval 的回调函数。
- 重复步骤 2 和 3 直到宏任务队列清空。
示例代码:
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
在这个例子中,首先执行全部同步代码,然后执行所有微任务,最后才执行下一个宏任务。
评论已关闭