var
、let
和 const
是 JavaScript 中用于声明变量的关键字,但它们在作用域、提升(hoisting)、以及是否可以重新赋值等方面存在一些重要的区别。
1. 作用域(Scope)
-
var
:
- 具有函数作用域(function scope),即如果在函数内部声明
var
变量,该变量在整个函数内都有效。
- 如果在函数外部声明,则具有全局作用域。
- 不具有块级作用域(block scope),在
if
、for
等块级结构内部声明的 var
变量,在块外也能访问。
-
let
和 const
:
- 具有块级作用域,即在
{}
内声明的变量只能在这对大括号内访问。常见的块级结构包括 if
、for
、while
等。
- 这两个关键字在块外无法访问在块内声明的变量。
| if (true) { |
| var x = 10; |
| let y = 20; |
| const z = 30; |
| } |
| console.log(x); |
| console.log(y); |
| console.log(z); |
2. 提升(Hoisting)
-
var
:
- 变量声明会被提升到作用域的顶部,但不会提升赋值操作。也就是说,可以在声明之前使用,但会得到
undefined
。
-
let
和 const
:
- 变量声明也会被提升,但在变量声明之前访问会导致
ReferenceError
,这种现象称为“暂时性死区”(Temporal Dead Zone, TDZ)。
| console.log(a); |
| var a = 5; |
| |
| console.log(b); |
| let b = 10; |
| |
| console.log(c); |
| const c = 15; |
3. 重新赋值(Reassignment)
-
var
:
-
let
:
-
const
:
- 不能被重新赋值,声明时必须赋值,且值是不可变的(对于基本数据类型)。对于对象和数组等复杂数据类型,引用是不可变的,但对象或数组的内容可以更改。
| var a = 10; |
| var a = 20; |
| |
| let b = 10; |
| b = 20; |
| |
| |
| const c = 10; |
| |
4. 最佳实践
- 使用
let
和 const
代替 var
是现代 JavaScript 开发的最佳实践。const
应用于不会重新赋值的变量,let
用于可能会重新赋值的变量。
- 使用
const
可以让代码更安全,因为它可以防止意外的重新赋值操作。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?