JavaScript变量作用域
- 未用
var
声明的变量是全局变量,是window
对象的属性 - 使用
var
声明的变量是有作用域的: - 在函数体内部声明,则作用域为整个函数体
for
循环语句块中无法定义属于它的局部作用域的变量,因为作用域是以函数为基本分隔单位。- 如果两个独立的函数各自声明了同名变量,则各自独立,互不干扰
- 嵌套函数中,内部函数可以访问外部函数的变量,反之外部函数不能访问内部函数的变量
- 嵌套函数中,如果内部函数和外部函数变量重名,则在内部函数中,内部函数的变量将覆盖外部函数的变量;而外部函数访问到的依然是外部函数的变量
- 上面一条说明了:JavaScript的函数在查找变量时从自身函数定义开始,从“内”向“外”查找。
- JavaScript会扫描整个函数体,把所有声明的变量“提升”到函数顶部;但是,并不会“提升”变量的初始化赋值
变量空间的污染
全局变量会绑定到window
对象上,不同的JavaScript文件如果使用了相同的全局变量,或定义了相同的全局函数,则会造成命名冲突。
- 一个方法是把自己所有的变量和函数全部绑定到一个全局变量中。[推荐]
- 另外一个方法是增加自己独特的变量命名前缀/后缀