📅  最后修改于: 2023-12-03 15:16:17.028000             🧑  作者: Mango
在Javascript中,存在一个事件循环(Event Loop)机制。这个机制控制着代码中异步操作(例如回调函数、Promise、setTimeout等)的执行顺序。了解事件循环机制,有助于开发者更好的理解Javascript的单线程执行模型,从而编写更高效、准确的代码。
事件循环是一个不断循环的过程,每次循环被称为tick。以下是事件循环的基本流程:
常见的异步操作分为两类:macro-task(宏任务)和micro-task(微任务)。
console.log('script start');
setTimeout(function() {
console.log('setTimeout');
}, 0);
Promise.resolve().then(function() {
console.log('Promise');
});
console.log('script end');
在上述代码中,会首先执行主机线任务(同步输出 script start
和 script end
),接着执行微任务(Promise)的输出(输出 Promise
)。最后,队列中没有宏任务,事件循环结束。但要注意,setTimeout中的回调函数虽然时间设为0,但它仍然属于宏任务,只是它被加入队列中可能会需要一些时间,而不是立即执行。因此,setTimeout最后输出 setTimeout
。
Javascript的事件循环机制决定了异步代码的执行次序,它是Javascript中的重要概念,也是Javascript的单线程模型的基础。开发者必须深入了解事件循环机制的运作原理,以编写更加准确、高效的代码。