var
-
var用于声明一个变量,可以包含一个可选的初始化。 -
其作用域是整个函数,或者如果在函数外部声明,它的作用域是全局。
-
var变量会被提升到其作用域的顶部,但初始化会保持在原处(如果变量在声明之前被引用,它的值会是undefined)。 -
可以多次重新声明。
var carName = "Volvo"; var carName; // 此时仍然等于 Volvo
let
let允许你声明一个作用域限制在块级,语句或表达式上的变量,与var的作用域为整个函数作用域或全局作用域不同。let的变量不会被提升。- 在同一个作用域或块级作用域中,不能多次声明
let变量。
const
const用于声明一个或多个常量,也就是值不可变的变量。一旦声明,就不能更改其值。- 和
let一样,const声明的变量的作用域限制在块级,并且不会被提升。 - 在同一个作用域或块级作用域中,不能多次声明
const变量。 - const 声明的时候就要直接赋值。
// var 作用域
var x = 10;
// Here x is 10
{
var x = 2;
// Here x is 2
}
// Here x is 2
// let 作用域
let x = 10;
// Here x is 10
{
let x = 2;
// Here x is 2
}
// Here x is 10| Scope | Redeclare | Reassign | Hoisted | Binds this | |
|---|---|---|---|---|---|
| var | No | Yes | Yes | Yes | Yes |
| let | Yes | No | Yes | No | No |
| const | Yes | No | No | No | No |
总的来说,你应该尽可能使用 let 和 const,因为它们的行为更接近其他 C 类语言(如 Java 或 C++),并且能帮助你编写更清晰、更易于理解的代码。而 var 由于其脱离实际开发需要的特性(例如变量提升甚至全局作用域)。现在在大多数情况下已经不推荐使用了。