函数作用域
JavaScript 中没有块级作用域,JavaScript 取而代之地使用了函数作用域。变量在声明它们的函数体以及这个函数体嵌套的任意函数内都是有定义的。
声明提前
以下两种写法是等价的。由于函数作用域的特性,局部变量在整个函数体始终是有定义的。
上述过程等价于:将函数内的变量声明提前至函数体顶部,同时变量初始化留在原来的位置。
由于 JavaScript 没有块级作用域,因此一些程序员特意将变量声明放在函数体顶部,而不是将声明靠近放在使用变量之处。这种做法使得他们的源代码非常清晰地反应了真实的变量作用域。