JavaScript中const和var的区别详解
本文详细解析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";
这种模式有助于编写更可预测、更少错误的代码。
到此这篇关于JavaScript中const和var的区别小结的文章就介绍到这了,更多相关JavaScript const var内容请搜索本站以前的文章或继续浏览下面的相关文章希望大家以后多多支持本站!
JS合并多个数组的三种方法:concat、spread与flat
2026-11-05 17:39:45
JavaScript怎么准确判断数据类型:typeof、instanceof与Object.prototype.toString
2026-11-05 17:09:21
JS中将数组和对象混合组装为JSON字符串
2026-11-05 16:41:42
JS运算符优先级与结合性的区别是什么?
2026-11-05 13:22:02
JS Map怎么只遍历Key或Value
2026-11-05 13:00:36
