-
作用域:
var:具有函数作用域,意味着变量在声明它的函数内有效,而在函数外无效。let和const:具有块级作用域,意味着变量在声明它的块(例如,if语句或循环)内有效,而在块外无效。
-
变量提升:
var:会被提升到其所在函数的顶部,但初始化值为undefined。let和const:不会被提升,访问会导致一个暂时性死区(Temporal Dead Zone,TDZ)错误,即在声明之前访问变量会抛出错误。
-
重复声明:
var:可以被重复声明而不会抛出错误。let和const:在同一作用域内不能重复声明相同的变量名。
-
赋值和重新赋值:
var和let:可以被赋值和重新赋值。const:声明时必须初始化,并且一旦赋值就不能再重新赋值。
-
全局对象属性:
var和let:在全局作用域中声明的变量会成为全局对象的属性(在浏览器中,window对象)。const:在全局作用域中声明的const变量不会成为全局对象的属性。
总的来说,推荐使用 let 和 const,尤其是在 ES6+ 的环境中,因为它们提供了更好的作用域控制和不可变性。const 尤其适合那些不需要重新赋值的变量。