在JavaScript中,var
、let
和 const
是用于声明变量的三种关键字,但它们之间在作用域、提升(hoisting)、重复声明以及重新赋值等方面存在明显的区别。
1. 作用域
- var:
var
声明的变量具有函数作用域或全局作用域,取决于其声明的位置。在函数内部声明的var
变量是局部变量,在函数外部声明的var
变量是全局变量。 - let 和 const:
let
和const
声明的变量具有块级作用域(block scope),即它们的作用域被限制在声明它们的块(通常是大括号{}
内的代码块)中。
2. 提升(Hoisting)
- var:使用
var
声明的变量会被提升(hoisting)到其所在作用域的顶部,但是初始化(赋值)不会被提升,只会将声明提升到顶部。 - let 和 const:
let
和const
声明的变量不会被提升,这意味着在声明之前访问它们会导致一个引用错误(ReferenceError)。
3. 重复声明
- var:可以在同一作用域内多次声明同一个