JavaScript执行机制核心是调用栈、任务队列和事件循环协同工作:调用栈执行同步代码(LIFO结构),任务队列分宏任务(如setTimeout)和微任务(如Promise.then),事件循环按“宏任务→微任务→渲染→下一宏任务”循环调度。
JavaScript 是单线程、非阻塞、基于事件循环的脚本语言,它的执行机制核心在于 调用栈(Call Stack)、任务队列(Task Queue) 和 事件循环(Event Loop) 三者协同工作。
JS 引擎执行同步代码时,会把函数调用逐层压入调用栈,执行完就弹出。它是后进先出(LIFO)结构,直观反映当前正在运行的函数链。
RangeError: Maximum call stack size exceeded
JS 把异步操作的回调按类型分进两个队列:
setTimeout、setInterv
al、I/O、UI 渲染、script 标签加载等Promise.then/catch/finally、queueMicrotask()、MutationObserver 等事件循环是一个不断运行的机制,它按固定顺序检查和调度任务:
setTimeout、new Promise),注册回调并交由浏览器或 Node.js 环境托管例如:
console.log(1); setTimeout(() => console.log(2), 0); Promise.resolve().then(() => console.log(3)); console.log(4); // 输出顺序:1 → 4 → 3 → 2
两者都遵循事件循环模型,但阶段划分不同:
process.nextTick() 比微任务还早执行(在当前操作末尾、下一阶段开始前)基本上就这些。理解调用栈、区分宏微任务、看清事件循环的调度节奏,你就掌握了 JS 执行机制的骨架。