JavaScript 中,let、var、const 这三种声明变量的方式该在什么场景下使用

先搞懂核心区别(基础前提)

要选对关键字,首先要明确它们的核心差异:
特性 var let const
作用域 函数作用域 / 全局 块级作用域({} 内) 块级作用域
变量提升 有(可先使用后声明) 有(但存在暂时性死区) 有(同 let)
重复声明 允许 不允许 不允许
重新赋值 允许 允许 不允许(引用类型仅禁止指向新值)
必须初始化 是(声明时必须赋值)

分场景告诉你该用谁

1. 优先用 const(最推荐)

使用场景:声明后不需要重新赋值的变量(包括基本类型、引用类型)。

这是 ES6 后的最佳实践,能让代码更健壮、语义更清晰(明确变量不可被重新赋值)。

javascript
// 1. 基本类型(数值、字符串、布尔等),值固定不变
const PI = 3.14159; // 常量
const NATIONALITY_LIST = ['中国', '美国', '英国']; // 数组(禁止重新赋值数组,但可修改数组内容)

// 2. 引用类型(对象、数组),只要不改变变量的指向,就可以用const
const user = { name: '张三', nationality: 'CN' };
user.nationality = 'US'; // ✅ 允许(只是修改对象属性,没有改变user的指向)
// user = { name: '李四' }; ❌ 禁止(重新赋值,会报错)

// 3. 函数声明(固定的函数引用)
const sayHello = function() {
  console.log('Hello');
};

2. 其次用 let

使用场景:声明后需要重新赋值的变量,且需要块级作用域(避免变量泄漏)。
javascript
// 1. 循环变量(最典型场景,避免var的变量提升问题)
for (let i = 0; i < 5; i++) {
  setTimeout(() => {
    console.log(i); // 输出 0,1,2,3,4(用var会输出5个5)
  }, 100);
}

// 2. 条件赋值/后续需要修改的变量
let score = 80;
if (score >= 90) {
  score = '优秀';
} else {
  score = '良好';
}

// 3. 块内临时变量(仅在{}内有效)
if (true) {
  let temp = '临时值';
  console.log(temp); // ✅ 正常输出
}
console.log(temp); // ❌ 报错(块级作用域,外部访问不到)

3. 尽量不用 var(仅兼容旧代码场景)

使用场景:几乎不推荐主动使用,仅在需要兼容极旧的 JS 环境(如 IE8 及以下),或维护老项目时遇到已有 var 声明的代码。
javascript
// var的问题示例(为什么不推荐)
var a = 1;
var a = 2; // ✅ 允许重复声明(容易出bug)

function test() {
  if (true) {
    var b = 3;
  }
  console.log(b); // ✅ 输出3(var是函数作用域,不是块级,变量泄漏)
}

快速判断口诀(新手直接套用)

  1. 先想:这个变量会不会重新赋值
    • 不会 → 用 const
    • 会 → 用 let
  2. 除非遇到老项目必须兼容,否则永远别用 var

总结

  1. const:首选,用于 “只读” 变量(禁止重新赋值,引用类型可改内部属性),提升代码可维护性;
  2. let:用于需要修改值的变量,块级作用域,避免 var 的作用域泄漏问题;
  3. var:仅兼容旧代码时使用,现代开发中几乎淘汰,核心问题是函数作用域 + 变量提升易出 bug。
遵循这个原则,你的代码会更规范,也能避免绝大多数变量相关的低级错误。

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注