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);  
}  

 

至此,問題也就說完瞭。

 

總結

上面的問題其實也反映的另一個問題,命名規范的問題,如果命名不規范,就會出現很多意想不到的問題,所以,花點時間上網查查幾種不同的命名的規范,這樣能在你編寫代碼的時候減少不必要的麻煩。

 

 

 

 

 

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *