2025年10月25日
var: 函数作用域。在函数内部声明的变量只能在函数内部访问,在函数外部不可见。如果在函数外部声明,则为全局变量。
let 和 const: 块级作用域。在任何一个代码块(如if、for、while等)中声明的变量只能在该代码块内部访问。
var: 存在变量提升,即变量可以在声明之前被访问,但其值为undefined。
let 和 const: 也存在提升,但不会初始化值为undefined,在声明之前访问会抛出ReferenceError(暂时性死区)。
var: 在相同作用域内可以重复声明同一个变量。
let 和 const: 在相同作用域内不允许重复声明同一个变量。
var 和 let: 声明时可以不初始化,后面再赋值。
const: 声明时必须初始化,且一旦赋值不能改变(对于基本类型,值不能改变;对于对象,引用不能改变,但对象内部的属性可以改变)。
三者都可以声明变量。
在全局作用域下声明的var变量会成为全局对象(浏览器中为window)的属性,而let和const不会。
默认使用 const,因为不可变的值更容易理解和维护,并且可以防止意外重赋值。
当变量需要重新赋值时,使用 let。
避免使用 var,因为它的函数作用域和变量提升可能导致意想不到的bug,而且现代JavaScript(ES6及以后)提供了更安全的let和const。