JS执行机制(同步、异步[宏任务、微任务])
JavaScript执行机制主要涉及到同步任务和异步任务。其中,异步任务又分为宏任务(macrotask)和微任务(microtask)。
宏任务(Macrotasks):
- 执行栈(同步代码)
- setTimeout
- setInterval
- setImmediate(Node.js 环境中)
- 请求浏览器 API(例如:DOM 事件监听器)
- I/O
微任务(Microtasks):
- Promise 的 then/catch/finally
- MutationObserver
- Object.observe (已废弃)
- process.nextTick(Node.js 环境中)
执行顺序如下:
- 执行同步代码,发起异步任务。
- 异步任务(宏任务)进入任务队列。
- 同步代码执行完毕。
- 执行微任务。
- 执行下一个宏任务。
例子代码:
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
在这个例子中,首先执行同步代码,然后发起 setTimeout
和 Promise
任务。setTimeout
是一个宏任务,而 Promise
的两个 then
是微任务。所以,输出顺序为:script start, script end, promise1, promise2, setTimeout。
评论已关闭