js声明变量的方式有两种:

没有声明关键字

这种情况下变量会被自动添加到全局环境。

var

用var声明变量是最经典的方式,变量的作用域是它所在的环境(函数或对象,全局则是window对象)。但js中不存在块级作用域,花括号不会限制变量的环境,且可以重复声明。

这两种方式声明的变量会被变量提升(Hoisting),即任何函数声明都被预先放入到内存中,但仍在原来的位置初始化。


而ES6通过const与let提供了块级作用域的支持。

const

声明常量,其余与let一致。

let

拥有块级作用域:let定义的变量只能在当前块中访问,同一块中也不能用let重复声明相同的变量。