当你需要对 var,let 和 const 进行复习时,希望对你有用。
var
语句用来在 JavaScript 中声明一个变量,该变量遵守以下规则:
作用域范围是函数作用域或全局作用域的。
不受暂存死区(TDZ)的限制。
它会在 上以相同的名称创建一个全局属性。
是可分配的。
是可声明的。
函数作用域和全局作用域
当出现在全局作用域内时, 创建一个全局变量。另外它还会在 上创建一个具有相同名称的全局属性:
当在函数内部声明时,变量的作用域为该函数:
声明会被提升:
意外的全局变量
在没有任何声明的情况下所分配的变量(无论是 , 还是 )在默认情况下会成为全局变量:
为了消除这种行为,需要使用严格模式:
可重新分配和重新声明
任何用 声明的变量都可以在以后进行重新分配或重新声明。重新声明的例子:
重新分配的例子:
let
语句在 JavaScript 中声明一个变量,该变量遵守以下规则:
属于块作用域。
受到暂存死区的约束。
它不会在 上创建任何全局属性。
是可分配的。
不可重新声明。
块作用域
用 声明的变量不会在 上创建任何全局属性:
当在函数内部声明时,变量的作用域为该函数:
当在块中声明时,变量的作用域为该块。以下是在块中使用的例子:
一个带有 块的例子:
相反, 并不受到块的限制:
暂存死区
声明可能会被提升,但是会产生暂存死区:
暂存死区可防止在初始化之前访问 声明。另外一个例子:
可以看到两个例子中产生的异常都是一样的:证明了“暂存死区”的出现。
可重新分配,不可重新声明
任何用 声明的变量都不能重新声明。重新声明引发异常的例子:
这是一个有效的重新分配的例子:
const
语句用来在 JavaScript 中声明一个变量,该变量遵守以下规则:
是属于块作用域的。
受到“暂存死区”的约束。
它不会在 上创建任何全局属性。
不可重新分配。
不可重新声明。
块作用域
用 const 声明的变量不会在 上创建任何全局属性:
当在函数内部声明时,变量的作用域为该函数:
当在块中声明时,变量的作用域为该块。块语句 的例子:
在 块中的例子:
暂存死区
声明可能会被提升,但是会进入暂存死区:
不可重新分配,不可重新声明
用 声明的任何变量都不能重新声明,也不能重新分配。一个在重新声明时抛出异常的例子:
重新分配的例子示例:
总结
领取专属 10元无门槛券
私享最新 技术干货