js中的事件循环机制(宏任务和微任务)
JavaScript中的事件循环是基于宏任务和微任务的概念。宏任务,如:script(整体代码), setTimeout, setInterval, setImmediate(Node.js中), I/O, UI rendering。微任务,如:process.nextTick(Node.js中), Promises, Object.observe(已废弃), 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
,最后才执行setTimeout
的代码。这是因为Promise
的回调会进入微任务队列,而setTimeout
的回调进入宏任务队列,按照事件循环的顺序,先执行完所有微任务后才会执行下一个宏任务。
评论已关闭