去提问»
提问背景 Question:
js中,定义变量用 var,let,const这些都有什么区别

JS中var、let和const区别

发布时间:2026-08-16 07:45 👁️ 阅读:0

在 JavaScript 中,varletconst 是用于声明变量的三个关键字。随着 ES6(ECMAScript 2015)的引入,letconst 成为了主流,逐渐取代了传统的 var。它们之间的核心区别可以从以下五个维度进行对比:

1. 作用域 (Scope)

  • var:具有函数作用域(Function Scope)。如果在函数外部声明,则是全局作用域;如果在函数内部声明,整个函数内都可以访问。它不受块级(如 iffor 循环的花括号 {})的限制。
  • letconst:具有块级作用域(Block Scope)。它们只在声明它们的花括号 {} 内部有效。

2. 变量提升 (Hoisting)

  • var:存在变量提升。变量可以在声明之前被访问,此时它的值是 undefined
  • letconst:也存在提升,但它们在声明之前处于**“暂时性死区”(Temporal Dead Zone, TDZ)**。在声明之前访问它们会直接抛出 ReferenceError 错误。

3. 重复声明 (Redeclaration)

  • var:允许在同一作用域内多次声明同一个变量。
  • letconst:在同一作用域内不允许重复声明同一个变量,否则会报错。

4. 全局对象属性 (Global Object Property)

  • var:在全局作用域下声明的变量会自动成为全局对象(浏览器环境中的 window)的属性。
  • letconst:在全局作用域下声明的变量不会挂载到全局对象上。

5. 值修改与初始化 (Reassignment & Initialization)

  • varlet:声明时不需要立即初始化(赋值),后续可以随意重新赋值。
  • const:声明的是一个只读的常量,必须在声明的同时进行初始化。一旦赋值,不能再重新指向新的引用(对于基本数据类型,值不能变;对于引用数据类型如对象或数组,其内部的属性或元素是可以修改的,但不能将整个变量重新赋值为另一个对象)。

总结对比表

| 特性 | var | let | const |
| :--- | :--- | :--- | :--- |
| 作用域 | 函数作用域 | 块级作用域 | 块级作用域 |
| 变量提升 | 会(初始化为 undefined) | 会(进入暂时性死区,报错) | 会(进入暂时性死区,报错) |
| 重复声明 | 允许 | 不允许 | 不允许 |
| 重新赋值 | 允许 | 允许 | 不允许 |
| 初始值 | 不需要 | 不需要 | 必须提供 |
| 挂载到 window | 是 | 否 | 否 |

最佳实践建议

  1. 首选 const:默认情况下,应该使用 const 声明所有变量。这有助于保证代码的安全性和可读性,避免变量被无意间修改。
  2. 次选 let:只有在确定变量的值后续需要被重新赋值时(例如循环计数器、累加器等),才使用 let
  3. 弃用 var:在现代 JavaScript 开发中,已经不需要再使用 var 了。