亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定

變量必須"聲明"嗎?

做這道題的時候,我發現:

“req1 = app2(5,6);”與“var req1 = app2(5,6);”同樣起作用!

req1這個變量事先沒有聲明過呀!如果不需要聲明也可以使用變量……那么聲明變量的過程又有什么意義呢?

正在回答

2 回答

因為變量是存在一個作用域內,只有在這個作用域內才可以訪問到這個變量;

比喻 ?function test(){var a=1 }; ?這時這個a就只在這個test方法內可以訪問到。如果在test外面訪問a就會報未定義。 再來說一下你的問題,如果不用var 來聲明 ,還是原來的代碼,function test(){ a=1 }; 這時這個a不僅可以在 test方法內可以訪問到,在test方法外也可以訪問到。也就是說如果不加var 就是直接聲明到了window 上,不管哪里都可以訪問到。最明顯的問題就是,你代碼寫的太多了,你前面已經寫了一個a ? 后面忘了又寫了一個a 都沒有加 var ; 他們在任何地方都可以訪問,后面的一個就會直接覆蓋掉前面的一個。用到你前面一個a的地方的代碼就會問題。也就是傳說中的全局變量污染。

1 回復 有任何疑惑可以回復我~
#1

godhypnos 提問者

非常感謝!
2015-11-20 回復 有任何疑惑可以回復我~
#2

godhypnos 提問者

那么,下面這段: ~~~~~~~~~~~~~~~ if (){ var a ; ........ for (var b=0; ......){ ....... } } else { var c; ...... } ~~~~~~~~~~~~~~~~ 變量a、b、c作用范圍相同嗎? 另:下面的x、y是全局變量嗎? ~~~~~~~~~~~~~~~~ function temp(x,y){ var z = x +y; ....... } ~~~~~~~~~~~~~~~~ 謝謝~~!??!
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;
????.......
}
~~~~~~~~~~~~~~~~

謝謝~~?。?!

0 回復 有任何疑惑可以回復我~
#1

李曉健

a b c 的作用域相同,因為ECMA5中 作用域還沒有塊級的,都是方法級的;ECMA6中才有塊級作用域。x y 也不是全局變量,他們只是參數,也只有在方法內才可以訪問到。
2015-11-20 回復 有任何疑惑可以回復我~
#2

godhypnos 提問者 回復 李曉健

萬分感謝~!
2015-11-20 回復 有任何疑惑可以回復我~

舉報

0/150
提交
取消
JavaScript進階篇
  • 參與學習       469074    人
  • 解答問題       22582    個

本課程從如何插入JS代碼開始,帶您進入網頁動態交互世界

進入課程

變量必須"聲明"嗎?

我要回答 關注問題
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號