做这道题的时候,我发现:
“req1 = app2(5,6);”与“var req1 = app2(5,6);”同样起作用!
req1这个变量事先没有声明过呀!如果不需要声明也可以使用变量……那么声明变量的过程又有什么意义呢?
因为变量是存在一个作用域内,只有在这个作用域内才可以访问到这个变量;
比喻 function test(){var a=1 }; 这时这个a就只在这个test方法内可以访问到。如果在test外面访问a就会报未定义。 再来说一下你的问题,如果不用var 来声明 ,还是原来的代码,function test(){ a=1 }; 这时这个a不仅可以在 test方法内可以访问到,在test方法外也可以访问到。也就是说如果不加var 就是直接声明到了window 上,不管哪里都可以访问到。最明显的问题就是,你代码写的太多了,你前面已经写了一个a 后面忘了又写了一个a 都没有加 var ; 他们在任何地方都可以访问,后面的一个就会直接覆盖掉前面的一个。用到你前面一个a的地方的代码就会问题。也就是传说中的全局变量污染。
那么,下面这段:
~~~~~~~~~~~~~~~
if (){
var a ;
........
for (var b=0; ......){
.......
}
}
else {
var c;
......
}
~~~~~~~~~~~~~~~~
变量a、b、c作用范围相同吗?
另:下面的x、y是全局变量吗?
~~~~~~~~~~~~~~~~
function temp(x,y){
var z = x +y;
.......
}
~~~~~~~~~~~~~~~~
谢谢~~!!!