在javascript中变量的作用范围

JavaScript中并没有强制性的要求必须提前声明变量,所以是可以不声明就可以使用的,这就造成了很多问题,比如会污染全局变量。因为根据变量定义的范围不同,变量有全局变量与局部变量之分。直接定义的变量是全局变量,可以被所有的脚本访问;而在函数中定义的变量是局部变量,只能在函数内部有效。如果二者使用的变量名一样,局部变量就会覆盖全局变量,即污染了全局变量。下面是一些代码:

1.

.

结果是:全局变量

要输出scope值,因为函数内部并未定义声明此变量,所以就会到外层去找scope,发现外层有scope全局变量,于是就把这个值输出。

2.


结果是:undefined

在test()函数内部声明了局部变量scope,并未进行赋值动作,所以此时scope的值是undefined

3.


结果是:undefined

代码示例2与代码示例3的结果一样,说明声明变量是不分时间先后顺序的,只要在函数内部声明了就一定会起作用,我们可以做个实验:

A.代码示例2中写 var scope="局部变量",即在声明的同时为其赋值,那么输出的结果就会是局部变量

B.在代码示例3中声明的同时也赋值的话,输出的结果却是undefined

说明声明变量没有时间先后顺序之分,不管是先声明再输出还是先输出后声明,效果是一样的;但是赋值动作不一样,代码是会按顺序进行解释执行的。

若把示例代码2和3中的var删除,那么输出的将是:全局变量,因为没有加var,作用域就是全局的

4.


结果是:undefined

             局部变量

全局变量可以不声明var,但是在 函数内变量必须声明var,在定义全局变量时加或不加var关键字没什么影响;但在定义局部变量时如果不加var关键字javascript解释程序会将其解释为全局变量。


转自:http://blog.csdn.net/tanyacui/article/details/52214763
展开阅读全文

没有更多推荐了,返回首页