var、let、const 都是声明变量的关键字,区别主要在作用域、能否重复声明、能否修改。
| 对比项 | var | let | const |
|---|---|---|---|
| 作用域 | 函数作用域 | 块级作用域 | 块级作用域 |
| 重复声明 | 可以 | 不可以 | 不可以 |
| 变量提升 | 有(值为 undefined) | 没有(会报错) | 没有(会报错) |
| 声明时是否必须赋值 | 不用 | 不用 | 必须赋值 |
| 值能否修改 | 能 | 能 | 不能 |
// var:可以重复声明、可以修改 var a = 1; var a = 2; // 不报错,a 被覆盖成 2 // let:可以修改,不能重复声明 let b = 1; b = 2; // 可以,b 变成 2 // let b = 3; // 报错:重复声明 // const:声明必须赋值,值不能改 const c = 1; // c = 2; // 报错:不能修改 // const d; // 报错:必须赋初始值
// var 没有块级作用域,{} 外面也能用
{
var x = 1;
}
console.log(x); // 1
// let / const 有块级作用域,{} 外面用不了
{
let y = 1;
}
// console.log(y); // 报错:y is not defined