JavaScript 中的变量声明方式有哪些?它们有什么区别?
2025年9月10日 by admin
在 JavaScript 中,变量声明有三种主要方式:var、let 和 const。它们的区别主要体现在作用域、提升和可变性等方面。以下是详细说明:
varvar 声明的变量是 函数作用域 或 全局作用域。也就是说,如果在函数内部声明,变量只能在该函数内访问;如果在函数外部声明,变量会成为全局变量。var 声明的变量会 提升,即变量声明会被提升到函数或全局作用域的顶部,但赋值不会提升。因此,访问一个尚未赋值的变量会得到 undefined。var 允许在同一作用域内重复声明同一变量。console.log(x); // undefined var x = 5; console.log(x); // 5 var x = 10; // 没有错误,x 值会被重新赋值为 10
letlet 声明的变量是 块级作用域,即它只在 {} 内部有效。let 也会提升,但会进入一个 暂时性死区(Temporal Dead Zone, TDZ),在声明之前访问变量会抛出 ReferenceError。let 不允许在同一作用域内重复声明同一变量。// TDZ示例 console.log(x); // ReferenceError: x is not defined let x = 5; console.log(x); // 5 let x = 10; // SyntaxError: Identifier 'x' has already been declared
constconst 也具有 块级作用域。const 会像 let 一样被提升到顶部,但同样会进入暂时性死区,直到声明的位置才可以访问。const 声明的变量必须在声明时初始化,而且其值不能重新赋值。如果 const 用来声明对象或数组,则对象或数组的内容是可以修改的,但不能重新赋值整个对象或数组。const x = 5; console.log(x); // 5 // x = 10; // TypeError: Assignment to constant variable. const arr = [1, 2, 3]; arr.push(4); // 合法 console.log(arr); // [1, 2, 3, 4] // arr = [5, 6, 7]; // TypeError: Assignment to constant variable.
var: 函数作用域、允许重复声明、会提升但赋值不提升。let: 块级作用域、不会重复声明、会提升但进入暂时性死区。const: 块级作用域、声明时必须赋值、不会重复声明、值不可重新赋值(但对象内容可以修改)。通常情况下,推荐使用 let 和 const,而避免使用 var,因为 let 和 const 具有更清晰和更安全的作用域控制。