在 JavaScript 中,有 3 种变量声明方式:
- var:传统变量声明方式,ES5 中引入
- 作用域为函数级
- 可以在声明之前使用(变量提升)
- 可以重新声明,后续声明不会报错
例如:
console.log(a); // 输出 undefined
var a = 1;
function test() {
var b = 1;
{
var b = 2; // 这里不会报错,后续声明覆盖前者
}
}
- let:块级作用域变量声明,ES6 中引入
- 作用域为块级 { … }
- 不可以在声明之前使用,会报错
- 不可以重新声明,后续声明会报错
例如:
console.log(a); // 报错,a未声明
let a = 1;
function test() {
let b = 1;
{
let b = 2; // 这里会报错,b已声明
}
}
- const:常量声明,ES6 中引入
- 作用域同 let,为块级
- 声明时必须初始化,且无法修改
- 不可以重新声明
例如:
const a = 1;
a = 2; // TypeError,无法修改常量
const b; // SyntaxError,必须初始化
const c = 1;
const c = 2; // Identifier 'c' has already been declared
所以总结来说:
- var:函数作用域,提升,可以重复声明
- let:块级作用域,不提升,不可以重复声明
- const:块级作用域常量,不提升,不可以重复声明,无法修改值
理解变量声明方式的差异,可以帮助我们编写符合标准的代码,避免一些常见问题。
在实践中,我们应优先使用 let 和 const,避免 var 带来的一些问题。let 用于可能改变的变量,const 用于常量,这可以让我们的代码更加清晰易理解。