const声明本身不直接提升运行时性能,但通过增强可预测性、支持常量折叠、避免去优化及稳定对象形状等方式,帮助JavaScript引擎(如V8)更高效地优化代码。

用 const 声明常量本身不会直接提升运行时性能(如执行速度或内存占用),但它能帮助 JavaScript 引擎更高效地优化代码——关键在于“可预测性”和“减少意外变更”。引擎(如 V8)在编译阶段会将 const 变量标记为不可重赋值,从而启用更多静态分析与内联优化,避免因变量可能被修改而做的保守处理。
明确意图,提升引擎优化机会
当变量从不重新赋值时,用 const 而非 let 或 var,向引擎传递了清晰的语义信号:
- V8 可能对
const声明的简单值(如数字、字符串、布尔)做常量折叠(constant folding),例如const PI = 3.14159; const area = radius * radius * PI;可能在编译期部分计算 - 避免因
let的“暂时性死区”或var的变量提升带来的作用域不确定性,减少运行时查作用域链的开销 - 配合严格模式,防止静默失败(如给
const重复赋值会抛错),便于早期发现逻辑错误,间接保障性能稳定性
减少意外重赋值导致的隐藏开销
看似微小的误操作可能引发性能退化:
- 用
var或let声明本应固定的配置对象,后续又被无意修改,导致对象形状(hidden class)改变,触发去优化(deoptimization) - 频繁重赋值一个数组引用(如
let arr = []; arr = getNewArray();),打断 V8 对数组类型的稳定推断,影响内联缓存效率 - 把函数赋给
let变量后又重写,使引擎无法安全内联该函数调用
而 const 从语法上杜绝这些情况,让类型和结构更稳定。
立即学习“Java免费学习笔记(深入)”;
配合对象/数组的不可变习惯
const 只保证引用不可变,不阻止对象内部修改。但结合开发约定,能推动更可控的数据流:
- 声明配置对象时用
const config = { timeout: 5000, retry: 3 };,再配合Object.freeze(config)(仅用于小而确定的配置),进一步锁定结构,利于引擎优化属性访问 - 避免在循环中反复创建相同结构的对象字面量;改用
const TEMPLATE = { id: 0, name: '' };并通过展开或赋值复用 - 对工具函数常量化:如
const DEFAULT_OPTIONS = Object.assign({}, BASE_OPTS);放在模块顶层,而非每次调用都生成
实际效果取决于使用场景
单个 const 声明带来的性能提升极小,但规模化后意义明显:
- 在高频执行函数中,所有不变量都用
const,有助于 V8 长期保持优化状态,避免反复去优化→重优化循环 - 大型应用中统一采用
const优先原则,配合 ESLint 规则(如prefer-const),能系统性降低维护引入的性能风险 - 对比测试显示:在百万次循环中访问
const数值比同作用域下let变量快约 1–3%,差异虽小,但在严苛场景(如游戏逻辑、实时渲染)值得重视



















