探討JavaScript中聲明全局變量三種方式的異同
變量及變量聲明是一門語言最基本的概念,初學(xué)者都會很快掌握。JavaScript中聲明變量也是如此,很簡單var(關(guān)鍵字)+變量名(標(biāo)識符)。
方式1
var test;
var test = 5;需注意的是該句不能包含在function內(nèi),否則是局部變量。這是第一種方式聲明全局變量。
方式2
test = 5;
沒有使用var,直接給標(biāo)識符test賦值,這樣會隱式的聲明了全局變量test。即使該語句是在一個function內(nèi),當(dāng)該function被執(zhí)行后test變成了全局變量。
方式3
window.test;
window.test = 5;這種方式經(jīng)常被用到一個匿名函數(shù)執(zhí)行后將一些函數(shù)公開到全局。 如JQuery1.5中最末一句
window.jQuery = window.$ = jQuery;
如果只是使用變量test,那么三種方式將沒有什么區(qū)別。比如:alert(test) 都將顯示5。但三種方式在某些情況下還是有區(qū)別的。分別按以上三種方式聲明三個變量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')}
結(jié)果如下
可以看到,
1,delete a2所有瀏覽器都是false。即通過var聲明的變量無法刪除,所有瀏覽器表現(xiàn)一致。這在犀牛書上也有提到。
2,通過window.a3方式聲明的全局變量在IE6/7/8中均無法刪除,IE9/Firefox/Chrome/Safari/Opera中卻可以。
雖然有以上兩點(diǎn)不同,但當(dāng)用in運(yùn)算時,都返回true。
alert('a1' in window);//true
alert('a2' in window);//true
alert('a3' in window);//true
用with打開對象window閉包時,所有瀏覽器也表現(xiàn)一致,如下
with(window){
if(a1){
alert(a1);//11
}
if(a2){
alert(a2);//22
}
if(a3){
alert(a3);//33
}
}
- 基于JavaScript 聲明全局變量的三種方式詳解
- javascript中局部變量和全局變量的區(qū)別詳解
- Javascript全局變量var與不var的區(qū)別深入解析
- javascript中運(yùn)用閉包和自執(zhí)行函數(shù)解決大量的全局變量問題
- javascript全局變量封裝模塊實(shí)現(xiàn)代碼
- JavaScript中全局變量、函數(shù)內(nèi)變量以及常量表達(dá)式的效率測試
- 理運(yùn)用命名空間讓js不產(chǎn)生沖突避免全局變量的泛濫
- 淺談JavaScript的全局變量與局部變量
- JS全局變量和局部變量最新解析
- js隱式全局變量造成的bug示例代碼
- Javascript學(xué)習(xí)之談?wù)凧S的全局變量跟局部變量(推薦)
- JavaScript防止全局變量污染的方法總結(jié)
相關(guān)文章
如何利用Three.js實(shí)現(xiàn)跳一跳小游戲
最近在公司寫H5的3D游戲,選擇了ThreeJS去做,做的過程中遇到了很多問題,下面這篇文章主要給大家介紹了關(guān)于如何利用Three.js實(shí)現(xiàn)跳一跳小游戲的相關(guān)資料,需要的朋友可以參考下2022-04-04javascript關(guān)于open.window子頁面執(zhí)行完成后刷新父頁面的問題分析
這篇文章主要介紹了javascript關(guān)于open.window子頁面執(zhí)行完成后刷新父頁面的問題,實(shí)例分析了javascript操作子頁面的執(zhí)行與父頁面的刷新技巧,非常具有實(shí)用價值,需要的朋友可以參考下2015-04-04微信小程序通過點(diǎn)擊事件傳參(data-)的操作示例
微信小程序可以通過直接寫 data-index="1" 進(jìn)行數(shù)據(jù)的綁定 ,利用 bindtap 點(diǎn)擊事件執(zhí)行函數(shù)從而獲取到參數(shù)信息,本文給大家介紹微信小程序通過點(diǎn)擊事件傳參(data-)的操作,感興趣的朋友一起看看吧2023-12-12JavaScript實(shí)現(xiàn)一鍵復(fù)制文本功能的示例代碼
這篇文章主要為大家介紹兩種javascript實(shí)現(xiàn)文本復(fù)制(將文本寫入剪貼板)的方法,文中的示例代碼講解詳細(xì),大家可以根據(jù)需求特點(diǎn)選用2023-03-03簡單實(shí)現(xiàn)js點(diǎn)擊展開二級菜單功能
這篇文章主要教大家簡單實(shí)現(xiàn)js點(diǎn)擊展開二級菜單功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-05-05Bootstrap基本樣式學(xué)習(xí)筆記之標(biāo)簽(5)
這篇文章主要介紹了Bootstrap學(xué)習(xí)筆記之標(biāo)簽基本樣式的相關(guān)資料,具有一定的參考價值,感興趣的小伙伴們可以參考一下2016-12-12JavaScript將坐標(biāo)字符串轉(zhuǎn)為數(shù)組的項目實(shí)踐
本文主要介紹了JavaScript將坐標(biāo)字符串轉(zhuǎn)為數(shù)組的項目實(shí)踐,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2024-01-01JavaScript switch case 的用法實(shí)例[范圍]
JavaScript switch case 的用法實(shí)例,大家可以參考下。2009-09-09