const 是 JavaScript(以及部分其他语言)中用于声明块级作用域常量的关键字:用 const 声明的变量必须在声明时初始化,且绑定不可重新赋值(但对象内容的修改不受限制)。自 ES6 引入以来,const 已成为现代前端与全栈开发中变量声明的默认首选,也是团队代码规范争议的核心话题之一。
const 的现状与使用趋势
在当前的社区讨论中,const 的定位已经从“可选项”演变为“默认项”。主流的 ESLint 规则(如 prefer-const)和 Airbnb 等风格指南都建议:只有确认需要重新赋值时才用 let,否则一律使用 const。其背后的理念是“最小可变性”——让代码阅读者一眼就能判断哪些绑定不会变化,降低维护成本。
不过争议也存在。一部分开发者认为“默认 const”会造成语义噪音:声明为 const 的对象实际上仍可被修改,可能给初学者带来“不可变”的误解;另一部分人则坚持可变性应当显式暴露,const 正好承担了这个信号角色。在仓颉等新语言的设计中,不可变性也被作为一等公民特性对待,说明这一趋势正在跨语言扩散,相关背景可参考华为仓颉编程语言 1.2.0 版本发布,增强跨平台、编译器和工具链能力。
团队规范中围绕 const 的工程实践
const 的讨论往往不止于语法本身,而是延伸到团队工程规范。例如在为什么我在团队里禁止使用 axios?一文中,作者对封装层和编码约束提出了强主张,反映出团队层面“该禁止什么、该强制什么”的规范之争正在升温——let 与 const 的使用边界正是这类规范文件中的常见条款。
而在 AI 辅助编码普及后,组件与代码片段的重复生成让变量声明的风格一致性问题更加突出,AI写代码越跑越快,项目组件却越来越乱?一套工程闭环根治重复造轮子 ⚡讨论的工程闭环,本质上也需要通过 Lint 规则(包括 prefer-const)这类自动化手段来兜底,而非依赖人工 review。
当前焦点与观察点
围绕 const 的几个值得关注的观察点:一是 TypeScript 中 as const 断言与只读类型的组合正在改变“常量”的实践边界,运行时不可变与编译期不可变开始分化;二是随着全栈开发讨论升温(如做全栈是前端骗局还是出路?所反映的),前端开发者需要理解不同后端语言中常量语义的差异,const 不再只是 JavaScript 的话题;三是新语言(如仓颉)在不可变性上的设计选择,可能反过来影响下一代 JS/TS 规范的讨论方向。总体来看,const 已经超越语法糖层面,成为代码可维护性讨论的一个缩影。