一.作用域
简单的说,作用域就是变量与函数的可访问范围,即作用域控制着变量与函数的可见性和生命周期。
在JavaScript中,变量的作用域有:
1.局部作用域
和全局作用域相反,局部作用域一般只在固定的代码片段内可访问到,最常见的例如函数内部,所有在一些地方也会看到有人把这种作用域称为函数作用域
2.全局作用域
在代码中任何地方都能访问到的对象拥有全局作用域,一般来说以下几种情形拥有全局作用域:
3.JavaScript的作用域链

解释:1.alert(a)中的a首先在test1函数里面去找,看有没有定义a这个变量,找到,就使用其中的定义的变量a;
2.如果没找到,则会继续在test中去找,有就使用;
3.如果还是没找到,就会继续向上找(全局对象)查找是否定义了a,找到了就使用.
作用域链定义
作用域链:JavaScript需要查询一个变量x时,首先会查找作用域链的第一个对象,如果以第一个对象没有定义x变量,JavaScript会继续查找有没有定义x变量,如果第二个对象没有定义则会继续查找,以此类推。
上面的代码涉及到了三个作用域链对象,依次是:test1、test、window。
*/
2、函数体内部,局部变量的优先级比同名的全局变量高。

3、JavaScript没有块级作用域。

4、函数中声明的变量在整个函数中都有定义。

这是由于在函数test6内局部变量x在整个函数体内都有定义( var a7= 10000,进行了声明),所以在整个test6函数体内隐藏了同名的全局变量a7。这里之所以会弹出’undefined’是因为,第一个执行alert(x)时,局部变量x仍未被初始化。

5、未使用var关键字定义的变量都是全局变量。

6、全局变量都是window对象的属性

网友评论