优先用 const,除非需重新赋值;需重赋值时用 let;基本不用 var。const 防意外覆盖,let 为块级作用域,var 因提升和作用域问题易引发 bug。

选 var、let 还是 const,关键看变量是否需要重新赋值、作用域范围以及是否希望被意外修改。
优先用 const,除非明确要重新赋值
const 声明的变量不能重新赋值(不是不可变),适合大多数场景——函数参数、配置对象、DOM 元素引用等。它能防止意外覆盖,提升代码可读性和安全性。
- 声明后不打算改值:直接用
const(如const API_URL = "https://api.example.com") - 声明一个对象或数组,后续只修改其内部属性/元素:仍可用
const(const user = { name: "Alice" }; user.name = "Bob";合法) - 想禁止任何修改(包括属性变更):配合
Object.freeze()或使用readonly类型(TypeScript 中)
需要重新赋值时,用 let,不用 var
let 是块级作用域,不会变量提升到块外,行为更符合直觉;而 var 是函数作用域、存在变量提升和重复声明不报错等问题,容易引发 bug。
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
- 循环计数器、临时中间值、状态标记(如
let isLoading = false;)用let - 避免在
if或for块内用var,否则可能泄漏到外层作用域 - 即使在函数内,也推荐统一用
let替代var,保持一致性
基本不用 var,除非兼容极老环境
现代浏览器和 Node.js 都支持 let/const,var 已无实际优势。仅在必须支持 IE10 及更早版本时才考虑,但这类场景已非常罕见。
立即学习“Java免费学习笔记(深入)”;
-
var的函数作用域易导致意外交互(如闭包中循环变量问题) -
var允许重复声明,掩盖拼写错误(var x = 1; var x = 2;不报错) - ES6+ 项目中建议全局禁用
var,可通过 ESLint 规则no-var强制执行
注意作用域与暂时性死区(TDZ)
let 和 const 都有暂时性死区:从块开头到声明语句之间,变量存在但不可访问。这点和 var 不同。
-
console.log(a); let a = 1;会报ReferenceError -
var在声明前访问会得到undefined,容易掩盖逻辑错误 - 因此声明尽量靠前,避免在块顶部之前就引用

















