讲解

变量是存放数据的容器。现代 JavaScript 用 let 和 const 声明变量:let 声明的变量可以重新赋值,const 声明的「常量」一旦赋值就不能再指向别的值。声明并赋值的语法是 const 名字 = 值,等号是赋值不是数学里的相等。

老代码里还能看到 var,它是 ES6 之前的声明方式,存在变量提升混乱、没有块级作用域、允许重复声明等一堆怪癖,现代代码应该完全避免使用。一条简单的团队共识是:默认用 const,确定要重新赋值才用 let,永远不用 var。这样写出的代码意图最清晰——读代码的人看到 const 就知道这个绑定不会变。

变量名由字母、数字、下划线和 $ 组成,不能以数字开头,区分大小写,也不能用保留字(如 let、for、function)。社区约定俗成用「小驼峰」命名:userName、totalPrice、isReady。常量如果值在写代码时就确定且永不变更(比如数学常数),可以用全大写下划线风格:MAX_RETRY_TIMES。

示例

let score = 60;
console.log('初始分数:', score);
score = score + 40; // let 声明的变量可以重新赋值
console.log('加分之后:', score);

const title = 'JavaScript 教程';
console.log('标题:', title);
// title = '别的'; // 取消注释会报错:Assignment to constant variable

// 注意:const 锁定的是「绑定」,对象的内容仍然可以改
const user = { name: '小明', age: 18 };
user.age = 19; // 允许:改的是对象内部
console.log('用户:', user.name, user.age);

常见坑

  • 误以为 const 对象完全不可变:const user = {} 之后 user.name = 'x' 是合法的。const 只保证 user 这个名字不指向别的对象。要深度冻结需要 Object.freeze,且它也只是浅冻结。
  • 忘记初始化就使用:let x; 之后 x 的值是 undefined,参与计算会得到 NaN。声明时顺手赋初值是好习惯。
  • 重复声明:同一个作用域里 let x 写两次会直接报语法错误。var 则悄悄允许,这正是它危险的地方。
  • 命名太随意:a、b、c、data2 这类名字三天后连自己都不认识。变量名要让人不看上下文也知道装了什么。

小结

let 可变、const 不可重新赋值、var 已淘汰;默认 const、必要时 let。变量名用小驼峰、见名知意。下一节看看变量能装哪些类型的数据。