JavaScript 词条目录
前端Wiki/JavaScript/基础/变量与数据类型

let const 与 var

ES6(2015 年)之后,声明变量只用 let 和 const,老的 var 只需要看懂即可。三者最关键的区别是作用域与能否重新赋值。

  • var:没有块级作用域,可以重复声明,变量会「泄漏」到块外面,还容易引发诡异的循环问题;
  • let:块级作用域(只在 {} 内有效),同一作用域不允许重复声明,先访问再声明会直接报错(暂时性死区);
  • const:声明常量,绑定关系不能变。注意它只是「不能再指向别的东西」,对象内部的属性依然可以修改。

实践建议:默认写 const,确定需要重新赋值时再换成 let,彻底告别 var。

本节要点let/const 是块级作用域,var 是函数作用域;const 禁止重新赋值但允许修改对象属性;新代码一律用 let/const。
JavaScript
// var 的问题:没有块级作用域,块外也能访问
if (true) {
  var old = '我是 var,泄漏出来了';
}
console.log(old);

// let:块级作用域,只在 {} 里有效
if (true) {
  let fresh = '只在块里有效';
  console.log(fresh);
}
// console.log(fresh); // 报错:fresh is not defined

// const:不能重新赋值
const MAX = 100;
// MAX = 200; // 报错:Assignment to constant variable

// 但 const 对象的属性可以修改
const user = { name: '小明' };
user.name = '小红';    // 允许
// user = {};         // 不允许:不能指向新对象
console.log(user.name);