JavaScript 中 var、let、const 的核心区别
·
在 JavaScript 中,var、let和 const都是用来声明变量的关键字,但它们的作用域、提升行为、是否可重新赋值、是否必须初始化等方面有明显差异。下面从核心维度进行对比说明。
一、核心区别速览
|
特性 |
var |
let |
const |
|---|---|---|---|
|
作用域 |
函数作用域 |
块级作用域 |
块级作用域 |
|
变量提升 |
✅ 有(初始化为 |
✅ 有(但存在 TDZ) |
✅ 有(但存在 TDZ) |
|
是否可重复声明 |
✅ 允许 |
❌ 不允许 |
❌ 不允许 |
|
是否可重新赋值 |
✅ 可以 |
✅ 可以 |
❌ 不可以 |
|
是否必须初始化 |
❌ 不需要 |
❌ 不需要 |
✅ 必须 |
|
全局声明是否挂载到 |
✅ 是 |
❌ 否 |
❌ 否 |
二、作用域差异(最关键)
1️⃣ var—— 函数作用域
function test() {
if (true) {
var a = 10;
}
console.log(a); // 10
}
var没有块级作用域,只在函数内有效。
2️⃣ let / const—— 块级作用域
if (true) {
let b = 20;
const c = 30;
}
console.log(b); // ❌ ReferenceError
console.log(c); // ❌ ReferenceError
✅ 在 {}、for、if中声明的变量,外部无法访问。
三、变量提升 & 暂时性死区(TDZ)
var
console.log(x); // undefined
var x = 5;
let / const
console.log(y); // ❌ ReferenceError
let y = 5;
原因:
let / const存在暂时性死区(TDZ):
变量在声明前不可访问
四、重复声明
var a = 1;
var a = 2; // ✅
let b = 1;
let b = 2; // ❌ SyntaxError
const c = 1;
const c = 2; // ❌ SyntaxError
五、重新赋值
var x = 1;
x = 2; // ✅
let y = 1;
y = 2; // ✅
const z = 1;
z = 2; // ❌ TypeError
⚠️ 注意:
const只是“不能重新赋值”,不是“不能修改对象内容”。
const obj = { name: 'JS' };
obj.name = 'JavaScript'; // ✅
obj = {}; // ❌
六、全局作用域下的差异
在浏览器中:
var a = 1;
let b = 2;
const c = 3;
window.a; // 1
window.b; // undefined
window.c; // undefined
七、最佳实践建议 ✅
✅ 优先使用 const
✅ 需要重新赋值时用 let
❌ 避免使用 var(除非维护老代码)
// 推荐写法
const API_URL = 'https://api.example.com';
let count = 0;
八、一句话总结
**
var是旧时代的函数作用域变量;
let是可变的块级变量;
const是不可变的块级常量。**
更多推荐

所有评论(0)