js的时间循环的讲解
JavaScript 事件循环(Event Loop)是其运行时的核心机制,负责处理异步操作,确保单线程的 JavaScript 能够高效地处理并发任务。下面从多个角度详细解析事件循环机制:
1. 核心概念
(1)执行栈(Call Stack)
- 定义:JavaScript 是单线程的,所有同步任务都在执行栈中依次执行。
- 特点:函数调用会形成一个栈帧,执行完毕后出栈。
(2)任务队列(Task Queue)
- 宏任务队列(MacroTask Queue):包含整体代码(script)、
setTimeout
、setInterval
、setImmediate
(Node.js)、I/O 操作等。 - 微任务队列(MicroTask Queue):包含
Promise.then
、MutationObserver
、process.nextTick
(Node.js)等。
(3)事件循环(Event Loop)
- 核心逻辑:不断从任务队列中取出任务并放入执行栈执行,直到队列清空。
2. 事件循环的执行流程
- 执行同步代码:首先执行执行栈中的所有同步任务。
- 处理微任务:同步任务执行完毕后,清空微任务队列(按入队顺序执行,期间新产生的微任务会被加入队列尾部并继续处理)。
- 处理宏任务:微任务队列清空后,从宏任务队列中取出一个任务执行,然后再次检查并清空微任务队列,以此循环。
示例代码:
javascript
console.log('1'); // 同步任务,直接入栈执行setTimeout(() => {console.log('2'); // 宏任务,放入宏任务队列
}, 0);Promise.resolve().