const声明变量必须初始化且不可重新赋值,其本质是绑定不可变而非值不可变;基础类型值不可变,引用类型内部可变;具有块级作用域和暂时性死区特性。

const 定义的变量在声明时就必须赋值,且不能重新赋值,这是它防止二次修改的核心机制。
const 保证的是“绑定不可变”,不是“值不可变”
const 锁定的是变量标识符与内存地址之间的绑定关系,而不是变量所指向的数据内容本身。也就是说:
- 基础类型(如 number、string、boolean)一旦用 const 声明,值确实无法更改,因为它们存储在栈中,变量直接持有值;
- 引用类型(如 object、array、function)用 const 声明后,虽然不能把变量重新指向另一个对象,但对象内部的属性或数组元素仍可修改。
例如:
const arr = [1, 2];arr.push(3); // ✅ 允许,arr 仍是原来那个数组
arr = [4, 5]; // ❌ 报错:Assignment to constant variable
声明必须初始化,且不能重复声明
const 不允许“先声明后赋值”,也不允许在同一作用域内重复声明同名变量:
立即学习“Java免费学习笔记(深入)”;
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
- const x; → 报错:Missing initializer in const declaration
- const y = 10; const y = 20; → 报错:Identifier 'y' has already been declared
- 但 let y = 10; const y = 20; 同样报错,因为 let 和 const 在同一作用域下也视为重复声明
作用域规则和块级绑定
const 是块级作用域,只在声明所在的 {} 内有效,且不会被提升(不存在变量提升,访问会报 ReferenceError):
- if 或 for 内部用 const 声明,外部无法访问;
- 不能在声明前使用(即“暂时性死区” TDZ),哪怕用 typeof 判断也会报错。
例如:
console.log(a); // ReferenceErrorconst a = 123;
适合用 const 的典型场景
凡是不打算重新赋值的变量,都应优先使用 const:
- 配置项:const API_URL = "https://api.example.com";
- DOM 元素引用:const button = document.getElementById("submit");
- 函数表达式:const handleClick = () => { ... };
- 解构赋值后的变量:const { name, age } = user;
只有明确需要后续重新赋值(比如循环计数器、状态切换变量),才考虑用 let。

















