JS的事件循环(Event Loop)
warning:
这篇文章距离上次修改已过185天,其中的内容可能已经有所变动。
JavaScript的事件循环是一个处理异步代码执行的机制。它不是JavaScript语言的一部分,而是由它的运行环境提供的,比如浏览器或Node.js。
事件循环可以概括为几个不同的阶段:
- 执行全部同步代码。
- 执行微任务(microtasks),例如
Promise
回调。 - 执行宏任务(macrotasks),例如
setTimeout
和setInterval
回调。 - 返回第一步,重复上述过程,直到没有任何任务需要执行。
以下是一个简单的例子,演示了事件循环的概念:
console.log('script start');
setTimeout(function() {
console.log('setTimeout');
}, 0);
Promise.resolve().then(function() {
console.log('promise');
}).then(function() {
console.log('promise2');
});
console.log('script end');
// 输出顺序为:
// script start
// script end
// promise
// promise2
// setTimeout
在这个例子中,setTimeout
和 Promise
的回调被推迟到下一个事件循环的阶段执行。尽管 setTimeout
设置的延迟是0,它仍然是一个宏任务,因此被放到下一个事件循环的宏任务队列中。相比之下,Promise
的回调是微任务,因此它会在当前"tick"中执行。
评论已关闭