JavaScript 事件循环(Event Loop)
什么是事件循环?
事件循环是 JavaScript 实现异步编程的核心机制。JavaScript 是单线程语言,通过事件循环来处理异步操作,避免阻塞主线程。
详解:
JavaScript 在设计之初便是单线程,即指程序运行时,只有一个线程存在,同一时间只能做一件事。 为什么要这么设计,跟 JavaScript 的应用场景有关 JavaScript 初期作为一门浏览器脚本语言,通常用于操作 DOM,如果是多线程,一个线程进行了删除 DOM,另一个添加 DOM,此时浏览器该如何处理? 为了解决单线程运行阻塞问题,JavaScript 用到了计算机系统的一种运行机制,这种机制就叫做事件循环(Event Loop)
核心概念
1. 调用栈(Call Stack)
- 存储函数执行上下文
- 遵循后进先出(LIFO)原则
- 同步代码在这里执行
2. 任务队列(Task Queue)
分为两种:
宏任务(Macro Task)
setTimeoutsetIntervalsetImmediate(Node.js)- I/O 操作
- UI 渲染
微任务(Micro Task)
Promise.then/catch/finallyasync/awaitMutationObserverprocess.nextTick(Node.js,优先级最高)
3. 执行顺序
- 执行同步代码(调用栈)
- 执行所有微任务
- 执行一个宏任务
- 执行所有微任务
- 重复步骤 3-4
初等难度练习题
console.log(1);
setTimeout(() => { console.log(2); }, 0);
new Promise((resolve, reject) => {
console.log('new Promise');
resolve();
}).then(() => {
console.log();
});
.();


