什么是事件循环?
事件循环(Event Loop)是 JavaScript 运行时的核心机制,负责处理异步操作和回调函数的执行顺序。它使得 JavaScript 能在单线程环境中高效处理并发任务,是理解异步编程的关键。
核心工作原理
同步代码执行
所有同步任务按顺序执行,阻塞后续代码。 💡 例如:console.log('同步代码')
会立即输出,不会等待异步操作。事件队列
异步任务完成后,将其回调函数放入事件队列中等待执行。 ⚡ 事件队列分为 宏任务(Macrotask) 和 微任务(Microtask),微任务优先级更高。循环处理
事件循环不断从队列中取出任务执行,形成循环。
事件循环的阶段 🔄
微任务(Microtask)
process.nextTick()
Promise.then()
/Promise.catch()
queueMicrotask()
- 执行完当前任务后立即处理,如图所示:
宏任务(Macrotask)
setTimeout
/setInterval
setImmediate
(Node.js 特有)UI 事件
(如点击、滚动)- 例如:
setTimeout(() => { console.log('宏任务'); }, 0);
常见误区 ⚠️
误区 1:事件循环是 JavaScript 的“主线程”
实际上,事件循环是运行在主线程上的一个循环机制,而真正的异步操作由浏览器或 Node.js 的线程池处理。误区 2:
setTimeout
是立即执行的setTimeout
的最小延迟是 4ms(浏览器中),且会被事件循环调度。误区 3:微任务总在宏任务之前执行
每次事件循环迭代中,微任务会在宏任务之前执行。