const
和 let
是 ES6 中引入的两个新的声明变量的关键字,它们与传统的 var
关键字相比,提供了更强大的变量作用域控制和数据保护机制。
1. var
关键字:
- 作用域: 函数作用域,在函数内部声明的变量可以在函数内部任何地方访问。
- 变量提升:
var
声明的变量会在代码执行前被提升到函数作用域的顶部,这意味着你可以在声明之前访问它,但它的值是undefined
。 - 可重复声明: 可以使用
var
关键字多次声明同一个变量,最后一次声明的值将生效。
2. let
关键字:
- 作用域: 块级作用域,在
{}
代码块内声明的变量只能在该代码块内访问。 - 无变量提升:
let
声明的变量不会被提升,在声明之前访问它会报错。 - 不可重复声明: 不能在同一个作用域内重复声明同一个变量。
3. const
关键字:
- 作用域: 与
let
相同,块级作用域。 - 常量:
const
声明的变量是常量,其值一旦被赋值就不能再修改。 - 无变量提升:
const
声明的变量不会被提升,在声明之前访问它会报错。 - 必须初始化:
const
声明的变量必须在声明时进行初始化。
总结:
关键字 | 作用域 | 变量提升 | 重复声明 | 初始化 | 可修改性 |
---|---|---|---|---|---|
var | 函数作用域 | 是 | 可以 | 不需要 | 可以 |
let | 块级作用域 | 否 | 不可以 | 不需要 | 可以 |
const | 块级作用域 | 否 | 不可以 | 需要 | 不可以 |
- 优先使用
const
声明常量,以防止意外修改。 - 使用
let
声明可能会改变值的变量。 - 避免使用
var
,因为它会导致一些难以预料的行为。
// 使用 var 声明变量
var a = 10;
console.log(a); // 输出 10
// 使用 let 声明变量
let b = 20;
console.log(b); // 输出 20
// 使用 const 声明常量
const c = 30;
console.log(c); // 输出 30
// 尝试修改 const 声明的常量
c = 40; // 报错: Assignment to constant variable.