在JavaScript中,const和var的区别
在JavaScript中,const
和var
是两种不同的变量声明方式,它们有以下主要区别:
1. 作用域 (Scope)
var - 函数作用域
function test() {if (true) {var x = 10;}console.log(x); // 10 - 在if块外部可以访问
}
const - 块级作用域
function test() {if (true) {const y = 20;}console.log(y); // ReferenceError: y is not defined
}
2. 变量提升 (Hoisting)
var - 会提升,初始值为undefined
console.log(a); // undefined
var a = 5;
const - 会提升,但在声明前访问会报错(暂时性死区)
console.log(b); // ReferenceError: Cannot access 'b' before initialization
const b = 10;
3. 重复声明
var - 允许重复声明
var x = 1;
var x = 2; // 不会报错
const - 不允许重复声明
const y = 1;
const y = 2; // SyntaxError: Identifier 'y' has already been declared
4. 重新赋值
var - 可以重新赋值
var name = "Alice";
name = "Bob"; // 允许
const - 不能重新赋值(常量)
const name = "Alice";
name = "Bob"; // TypeError: Assignment to constant variable
5. 必须初始化
var - 可以不初始化
var x; // undefined
const - 必须初始化
const y; // SyntaxError: Missing initializer in const declaration
6. 全局对象属性
var - 在全局作用域声明时成为window对象的属性
var globalVar = "hello";
console.log(window.globalVar); // "hello"
const - 不会成为window对象的属性
const globalConst = "world";
console.log(window.globalConst); // undefined
重要注意事项
对于const
声明的对象和数组:
const person = { name: "Alice" };
person.name = "Bob"; // 允许 - 修改对象属性
// person = { name: "Charlie" }; // 错误 - 不能重新赋值const numbers = [1, 2, 3];
numbers.push(4); // 允许 - 修改数组内容
// numbers = [5, 6, 7]; // 错误 - 不能重新赋值
现代开发建议
- 优先使用
const
- 需要重新赋值时使用
let
- 避免使用
var
(除非有特殊需求)
// 推荐写法
const PI = 3.14159;
let count = 0;// 不推荐
var oldWay = "avoid this";
这种模式有助于编写更可预测、更少错误的代码。