javascript變量:全局?還是局部?這個得注意
來源:程序員人生 發布時間:2014-11-18 08:44:01 閱讀次數:3373次
在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下全局變量:
<span style="font-family:KaiTi_GB2312;">alert(window.i);
alert(window.name);</span>
在Javascript的函數體中,有下面幾種情況需要注意:
1、有沒有Var
如果有Var,在函數內部聲明變量是局部變量,以下例,讀取不到name的數據。
<span style="font-family:KaiTi_GB2312;">function box(){
var name ='Ling';
}
alert(name);</span>
如果把var去掉的話,那末就會輸出:Ling,此時聲明的變量為全局變量。在寫代碼的進程中,不適用var就初始變量的話,會有很多意外產生,所以初始變量的時候1定要加上var。
2、全局變量和局部變量命名相同
<span style="font-family:KaiTi_GB2312;">var scope="global";
function t(){
alert(scope);
var scope="local"
alert(scope);
} </span>
終究的輸出結果是:
undefined
local
為何會出現這樣的結果?由于:
javascript 變量范圍
(1)全局變量的作用域是全局性的,即在全部Javascript程序中,全局變量作用途處都存在。定義在”script”塊中,在”function”函數外。
(2)局部變量的作用域是局部性的,在函數內部或函數參數時定義,作用范圍是從函數開始到結尾(注意此處說法)
(3)在函數內部,局部變量的優先級比同名的全局變量優先級要高;如果存在與全局變量名稱相同的局部變量(包括參數),那末該全局變量將不再起作用。
原來是這個緣由。不知道你看明白了沒有~~
那末當全局變量和局部變量重名時,怎樣解決這個問題呢?
哈哈~~最簡單確當然就是避免全局變量和局部變量相遇咯~~
還有另外1種方法,window對象的所有屬性具有全局作用域,用window.全局變量名,以下:
<span style="font-family:KaiTi_GB2312;">var scope="global";
function t(){
alert(window.scope);
var scope="local"
alert(scope);
} </span>
至此,問題也就說完了。
總結
上面的問題其實也反應的另外一個問題,命名規范的問題,如果命名不規范,就會出現很多意想不到的問題,所以,花點時間上網查查幾種不同的命名的規范,這樣能在你編寫代碼的時候減少沒必要要的麻煩。
生活不易,碼農辛苦
如果您覺得本網站對您的學習有所幫助,可以手機掃描二維碼進行捐贈