變量必須"聲明"嗎?
做這道題的時候,我發(fā)現(xiàn):
“req1 = app2(5,6);”與“var req1 = app2(5,6);”同樣起作用!
req1這個變量事先沒有聲明過呀!如果不需要聲明也可以使用變量……那么聲明變量的過程又有什么意義呢?
做這道題的時候,我發(fā)現(xiàn):
“req1 = app2(5,6);”與“var req1 = app2(5,6);”同樣起作用!
req1這個變量事先沒有聲明過呀!如果不需要聲明也可以使用變量……那么聲明變量的過程又有什么意義呢?
2015-11-20
舉報
2015-11-20
因為變量是存在一個作用域內(nèi),只有在這個作用域內(nèi)才可以訪問到這個變量;
比喻 ?function test(){var a=1 }; ?這時這個a就只在這個test方法內(nèi)可以訪問到。如果在test外面訪問a就會報未定義。 再來說一下你的問題,如果不用var 來聲明 ,還是原來的代碼,function test(){ a=1 }; 這時這個a不僅可以在 test方法內(nèi)可以訪問到,在test方法外也可以訪問到。也就是說如果不加var 就是直接聲明到了window 上,不管哪里都可以訪問到。最明顯的問題就是,你代碼寫的太多了,你前面已經(jīng)寫了一個a ? 后面忘了又寫了一個a 都沒有加 var ; 他們在任何地方都可以訪問,后面的一個就會直接覆蓋掉前面的一個。用到你前面一個a的地方的代碼就會問題。也就是傳說中的全局變量污染。
2015-11-20
那么,下面這段:
~~~~~~~~~~~~~~~
if (){
????var a ;
? ??........
????for (var b=0; ......){
????.......
? ? }
}
else {
????var c;
????......
}
~~~~~~~~~~~~~~~~
變量a、b、c作用范圍相同嗎?
另:下面的x、y是全局變量嗎?
~~~~~~~~~~~~~~~~
function temp(x,y){
????var z = x +y;
????.......
}
~~~~~~~~~~~~~~~~
謝謝~~?。?!