JavaScript变量声明:var、let与const的核心区别
JavaScript变量声明:var、let与const的核心区别
在JavaScript的发展历程中,变量声明方式经历了从单一到多元的演变。ES6引入的let和const解决了var的诸多缺陷,成为现代JS开发的首选。本文将深入解析三者的核心差异。
1. 作用域差异
var仅支持函数作用域,而let和const支持块级作用域(以{}为边界)。
// var的函数作用域特性
function testVar() { if (true) { var name = "var"; } console.log(name); // 输出"var",if块内声明的变量可在函数内访问 } // let的块级作用域特性
function testLet() {
if (true) {
let name = "let";
}
console.log(name); // 报错:name is not defined
}
2. 变量提升与暂时性死区
var存在变量提升,可在声明前访问(值为undefined);let和const虽有提升,但存在“暂时性死区”,声明前访问会报错。
console.log(varVar); // 输出undefined,var存在变量提升
var varVar = "test";
console.log(letVar); // 报错:Cannot access 'letVar' before initialization
let letVar = "test";
3. 重复声明与赋值限制
var允许重复声明同一变量,let和const则禁止;const声明的变量不可重新赋值(但引用类型的属性可修改)。
4. 三者核心区别对比
| 特性 | var | let | const |
|---|---|---|---|
| 作用域 | 函数作用域 | 块级作用域 | 块级作用域 |
| 重复声明 | 允许 | 禁止 | 禁止 |
| 重新赋值 | 允许 | 允许 | 禁止 |
| 暂时性死区 | 无 | 有 | 有 |
5. 最佳实践
- 优先使用
const,仅在确需重新赋值时使用let - 避免使用
var,减少作用域相关Bug - 声明引用类型变量(对象、数组)时,
const仅保证引用不变,需注意属性修改风险
浙公网安备 33010602011771号