const声明必须在初始化时赋值,否则解析阶段抛出SyntaxError;其设计目标是创建不可重新赋值的绑定,需声明即关联确定值;合法初始化包括字面量、纯函数调用、对象/数组字面量及解构赋值。

const 声明必须在初始化时赋值,这不是可选建议,而是 JavaScript 引擎强制执行的语法规则。只要不满足“声明即赋值”,代码就会在解析阶段报错,根本不会运行。
为什么必须初始化
const 的设计目标是创建一个不可重新赋值的绑定(binding),而非单纯“不可变的值”。要确保这个绑定从一开始就有确定的指向,引擎要求它在声明语句中就必须明确关联一个值。否则就相当于留了一个“空引用”,违背了 const 的语义前提。
- 未初始化会触发 SyntaxError: Missing initializer in const declaration
- 该错误发生在代码解析(parsing)阶段,早于执行,无法用 try/catch 捕获
- 哪怕只差一个分号或换行,比如
const PI后没跟= 3.14,就直接失败
初始化的合法写法
初始化必须是声明语句的一部分,且表达式需能立即求值。常见合规形式包括:
- 字面量直接赋值:
const VERSION = "2.1.0";、const COUNT = 42; - 调用纯函数(无副作用、返回确定值):
const NOW = Date.now();、const IS_DEV = process.env.NODE_ENV === "development"; - 对象或数组字面量:
const CONFIG = { timeout: 5000 };、const COLORS = ["red", "blue"]; - 解构赋值(本质仍是初始化):
const { id, name } = userData;
哪些看似合理但实际违规
以下写法都会报错,因为它们把“赋值”和“声明”拆开了,或依赖运行时逻辑:
立即学习“Java免费学习笔记(深入)”;
-
const FLAG;→ 缺少初始化表达式 -
const FLAG; FLAG = true;→ 两步操作,第二步是重新赋值,禁止 -
const FLAG = someAsyncFunction();→ 若函数返回 Promise,值不确定,虽语法通过但语义危险(不推荐) -
let temp = 100; const FLAG = temp;→ 可以,但绕远;应直接const FLAG = 100;
如何在团队中保障规范
单靠记忆容易疏漏,建议结合工具链落地约束:
- 启用 ESLint 规则
init-declarations(配合always选项),自动标记未初始化的 const - 使用 Prettier + ESLint 配合,在保存时自动修正简单场景(如补全字面量)
- 在 CI 流程中加入 lint 检查,阻断含此类错误的代码合入
- 代码审查时重点关注 const 声明行是否含
=及右侧是否为有效表达式


















