JavaScript聲明全域變數三種方式的異同

來源:互聯網
上載者:User

變數及變數聲明是一門語言最基本的概念,初學者都會很快掌握。JavaScript中聲明變數也是如此,很簡單var(關鍵字)+變數名(標識符)。

方式1

var test;var test = 5;

需注意的是該句不能包含在function內,否則是局部變數。這是第一種方式聲明全域變數。

方式2

test = 5;

沒有使用var,直接給標識符test賦值,這樣會隱式的聲明了全域變數test。即使該語句是在一個function內,當該function被執行後test變成了全域變數。

方式3

window.test;window.test = 5;

這種方式經常被用到一個匿名函數執行後將一些函數公開到全域。 如JQuery1.5中最末一句

window.jQuery = window.$ = jQuery;

如果只是使用變數test,那麼三種方式將沒有什麼區別。比如:alert(test) 都將顯示5。但三種方式在某些情況下還是有區別的。分別按以上三種方式聲明三個變數a1,a2,a3。

a1 = 11;var a2 = 22;window.a3 = 33;

1,for in window

for(a in window){if(a=='a1'||a=='a2'||a=='a3'){alert(a)}}

IE6/7/8/9:只彈出了a3,說明通過第一,二種方式聲明的全域變數通過for in window時將擷取不到。
Firefox/Chrome/Safari/Opera :a1,a2,a3都彈出了,說明三種方式聲明的全域變數,通過for in window時都能擷取到。

2,delete

try {alert(delete a1);}catch(e){alert('無法delete a1')}try{alert(delete a2);}catch(e){alert('無法delete a2')}try{alert(delete a3);}catch(e){alert('無法delete a3')}

結果如下

可以看到,
1,delete a2所有瀏覽器都是false。即通過var聲明的變數無法刪除,所有瀏覽器表現一致。這在犀牛書上也有提到。
2,通過window.a3方式聲明的全域變數在IE6/7/8中均無法刪除,IE9/Firefox/Chrome/Safari/Opera中卻可以。

雖然有以上兩點不同,但當用in運算時,都返回true。

alert('a1' in window);//truealert('a2' in window);//truealert('a3' in window);//true

用with開啟對象window閉包時,所有瀏覽器也表現一致,如下

with(window){if(a1){alert(a1);//11}if(a2){alert(a2);//22}if(a3){alert(a3);//33}}

相關:

JavaScript中兩種類型的全域對象/函數

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.