JavaScript在浏览器中经解析、编译、执行三阶段运行:先词法分析生成AST并检查语法;再由Ignition转字节码、TurboFan优化热点函数为机器码;最后通过调用栈、堆内存和事件循环协同执行,微任务优先于宏任务。
JavaScript 在浏览器中不是直接运行的“源代码”,而是经过解析、编译和执行三个核心阶段完成的。现代浏览器(如 Chrome、Firefox)使用即时编译(JIT)技术,在保证开发灵活性的同时提升运行效率。
当浏览器遇到 标签或内联 JS,会先将字符流按语法规则切分成 token(如 const、name、=),再构建抽象语法树(AST)。这一步不执行代码,只检查语法是否合法——比如缺少右括号或用错关键字,就会在此报 SyntaxError。
以 V8 引擎(Chrome / Edge / Node.js 使用)为例:
,热了再编译,甚至退化重编译(deoptimization)——比如变量类型突然改变。执行阶段依赖三大机制:
RangeError;很多“为什么没按顺序执行”的困惑,源于对异步模型不熟。例如:
console.log(1);输出是 1 → 4 → 3 → 2,因为 Promise 回调是微任务,排在当前脚本(宏任务)之后、下一个 setTimeout 之前。