var

  1. var 用于声明一个变量,可以包含一个可选的初始化。

  2. 其作用域是整个函数,或者如果在函数外部声明,它的作用域是全局。

  3. var 变量会被提升到其作用域的顶部,但初始化会保持在原处(如果变量在声明之前被引用,它的值会是 undefined)。

  4. 可以多次重新声明。

    var carName = "Volvo";
    var carName; // 此时仍然等于 Volvo

let

  1. let 允许你声明一个作用域限制在块级,语句或表达式上的变量,与 var 的作用域为整个函数作用域或全局作用域不同。
  2. let 的变量不会被提升。
  3. 在同一个作用域或块级作用域中,不能多次声明 let 变量。

const

  1. const 用于声明一个或多个常量,也就是值不可变的变量。一旦声明,就不能更改其值。
  2. let 一样,const 声明的变量的作用域限制在块级,并且不会被提升。
  3. 在同一个作用域或块级作用域中,不能多次声明 const 变量。
  4. 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
ScopeRedeclareReassignHoistedBinds this
varNoYesYesYesYes
letYesNoYesNoNo
constYesNoNoNoNo

总的来说,你应该尽可能使用 letconst,因为它们的行为更接近其他 C 类语言(如 Java 或 C++),并且能帮助你编写更清晰、更易于理解的代码。而 var 由于其脱离实际开发需要的特性(例如变量提升甚至全局作用域)。现在在大多数情况下已经不推荐使用了。