现代 javascript 开发中应优先使用 const,需重新赋值时用 let,基本不用 var;因三者在作用域(块级 vs 函数级)、提升行为(tdz 限制)和赋值规则(const 必初始化且不可重赋值)上存在根本差异。

直接说结论:现代 JavaScript 开发中,优先用 const,需要重新赋值时改用 let,基本不用 var。这不是风格偏好,而是由三者在作用域、提升行为、可变性上的根本差异决定的。
作用域:块级 vs 函数级
var 声明的变量属于函数作用域(或全局作用域),不认 {} 块。哪怕在 if 或 for 里声明,也能在块外访问。
let 和 const 是块级作用域——只要被一对花括号 {} 包裹,变量就只在其中有效。这更符合直觉,也避免意外泄露。
- var:if 内声明 → 外部能读;for 循环内声明 → 整个函数都可见
- let / const:if 内声明 → 外部访问直接报错;for 循环每次迭代都有独立绑定
变量提升与暂时性死区(TDZ)
var 会把声明“提升”到作用域顶部,但赋值留在原地,所以声明前访问得到 undefined,容易掩盖逻辑错误。
let 和 const 虽然也会被提升,但在声明语句执行前处于“暂时性死区”,访问就报 ReferenceError,强制你按顺序写代码。
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
-
var:
console.log(a); var a = 1;→ 输出undefined -
let / const:
console.log(b); let b = 2;→ 报错:Cannot access 'b' before initialization
重复声明与赋值规则
var 允许同一作用域内重复声明,后一次覆盖前一次,容易引发静默覆盖问题。
let 和 const 禁止重复声明(包括和 var/const 混用),声明即锁定标识符名。
const 还多一层限制:声明时必须初始化,且不能重新赋值(注意:对象或数组本身可修改属性/元素,只是不能把变量指向新地址)。
-
var:
var x = 1; var x = 2;→ 合法,x 最终为 2 -
let:
let y = 1; let y = 2;→ 报错:Identifier 'y' has already been declared -
const:
const z = 3;→ 必须初始化;z = 4;→ 报错;z.push(5);→ 合法(若 z 是数组)
实际怎么选:三条简单原则
写代码时不用纠结,按这个流程判断:
- 这个值从声明起就不会再指向别的东西?→ 用 const
- 这个值后续要重新赋值(比如循环计数器、临时状态)?→ 用 let
- 你在维护老项目,或必须兼容 IE?→ 才考虑 var,否则跳过
例如:const API_URL = 'https://api.example.com';、let loading = false;、for (let i = 0; i —— 全部自然贴合语义。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










