JavaScript 变量作用域

变量作用域

变量能够被访问的范围被称为变量作用域。

变量声明

ES6 之前所有的变量都使用 var 关键字进行声明,ES6 中新增了 letconst 两种变量声明的关键字。

  • 使用 var 声明变量

    使用 var 声明的变量会被自动添加到最靠近的上下文中,如果变量未经声明就初始化了,会被添加到全局上下文中。

    var 声明的变量会被拿到函数或全局作用域的顶部,这种现象被称为变量提升。提升让同一作用域中的代码不必考虑变量是否已经声明就可以直接使用。可是在实践中,提 升也会导致合法却奇怪的现象,即在变量声明之前使用变量。

    单需要注意的是:变量的声明会提升,但变量的赋值不会。

  • 使用 let 的块级作用域声明

    ES6 新增的 let 关键字跟 var 很相似,但它的作用域是块级的,这也是 JavaScript 中的新概念。块级作用域由最近的一对包含花括号 {} 界定。换句话说,if 块、while 块、function 块,甚至连单独 的块也是 let 声明变量的作用域。

    letvar 的另一个不同之处是在同一作用域内不能声明两次。

    重复的 var 声明会被忽略,而重 复的 let 声明会抛出 SyntaxError

  • 使用 const 的常量声明

    ES6 同时还增加了 const 关键字。使用 const 声明的变量必须同时初始化为某个值。 一经声明,在其生命周期的任何时候都不能再重新赋予新值。

    由于 const 声明暗示变量的值是单一类型且不可修改,JavaScript 运行时编译器可以将其所有实例都替换成实际的值,而不会通过查询表进行变量查找。谷歌的 V8 引擎就执行这种优化。

作者

Y2hlbmdsZWk=

发布于

2019-06-19

更新于

2021-09-01

许可协议