JavaScript 变量作用域
变量作用域
变量能够被访问的范围被称为变量作用域。
变量声明
ES6 之前所有的变量都使用 var 关键字进行声明,ES6 中新增了 let 和 const 两种变量声明的关键字。
使用
var声明变量使用
var声明的变量会被自动添加到最靠近的上下文中,如果变量未经声明就初始化了,会被添加到全局上下文中。var声明的变量会被拿到函数或全局作用域的顶部,这种现象被称为变量提升。提升让同一作用域中的代码不必考虑变量是否已经声明就可以直接使用。可是在实践中,提 升也会导致合法却奇怪的现象,即在变量声明之前使用变量。单需要注意的是:变量的声明会提升,但变量的赋值不会。
使用
let的块级作用域声明ES6 新增的
let关键字跟var很相似,但它的作用域是块级的,这也是JavaScript中的新概念。块级作用域由最近的一对包含花括号{}界定。换句话说,if 块、while 块、function 块,甚至连单独 的块也是let声明变量的作用域。let与var的另一个不同之处是在同一作用域内不能声明两次。重复的
var声明会被忽略,而重 复的let声明会抛出SyntaxError。使用
const的常量声明ES6 同时还增加了
const关键字。使用const声明的变量必须同时初始化为某个值。 一经声明,在其生命周期的任何时候都不能再重新赋予新值。由于
const声明暗示变量的值是单一类型且不可修改,JavaScript运行时编译器可以将其所有实例都替换成实际的值,而不会通过查询表进行变量查找。谷歌的 V8 引擎就执行这种优化。
JavaScript 变量作用域