javascript變數:全域?還是局部?這個得注意
在JS中,是沒有塊級範圍的
舉兩個個例子:
if語句塊:
if (true){var name='Ling';}alert(name);輸出:Ling
for語句塊;
for(var i=0;i<10;i++) {var name='Ling';}alert(i);alert(name);
輸出:10
輸出:Ling
也就是說最後的結果都是window下全域變數:
alert(window.i);alert(window.name);
在Javascript的函數體中,有下面幾種情況需要注意:1、有無Var
如果有Var,在函數內部聲明變數是局部變數,如下例,讀取不到name的資料。
function box(){var name ='Ling';}alert(name);如果把var去掉的話,那麼就會輸出:Ling,此時聲明的變數為全域變數。在寫代碼的過程中,不適用var就初始變數的話,會有很多意外發生,所以初始變數的時候一定要加上var。
2、全域變數和局部變數命名相同
var scope="global"; function t(){ alert(scope); var scope="local" alert(scope); } 最終的輸出結果是:
undefined
local
為什麼會出現這樣的結果?因為:
javascript 變數範圍
(1)全域變數的範圍是全域性的,即在整個Javascript程式中,全域變數作用處處都存在。定義在”script”塊中,在”function”函數外。
(2)局部變數的範圍是局部性的,在函數內部或函數參數時定義,作用範圍是從函數開始到結尾(注意此處說法)
(3)在函數內部,局部變數的優先順序比同名的全域變數優先順序要高;如果存在與全域變數名稱相同的局部變數(包括參數),那麼該全域變數將不再起作用。
原來是這個原因。不知道你看明白了沒有~~
那麼當全域變數和局部變數重名時,怎麼解決這個問題呢?
哈哈~~最簡單的當然就是避免全域變數和局部變數相遇咯~~
還有另外一種方法,window對象的所有屬性擁有全域範圍,用window.全域變數名,如下:
var scope="global"; function t(){ alert(window.scope); var scope="local" alert(scope); }
至此,問題也就說完了。
總結
上面的問題其實也反映的另一個問題,命名規範的問題,如果命名不規範,就會出現很多意想不到的問題,所以,花點時間上網查查幾種不同的命名的規範,這樣能在你編寫代碼的時候減少不必要的麻煩。