基于JavaScript 聲明全局變量的三種方式詳解
JS中聲明全局變量主要分為顯式聲明或者隱式聲明下面分別介紹。
聲明方式一:
使用var(關(guān)鍵字)+變量名(標識符)的方式在function外部聲明,即為全局變量,否則在function聲明的是局部變量。該方式即為顯式聲明詳細如下:
<script> var test = 5;//全局變量 function a(){ var a = 3;//局部變量 alert(a); } function b(){ alert(test); } //a();//調(diào)用a方法,那么方法里面的內(nèi)容才會執(zhí)行 //b();//同上 </script>
聲明方式二:
沒有使用var,直接給標識符test賦值,這樣會隱式的聲明了全局變量test。即使該語句是在一個function內(nèi),當(dāng)該function被執(zhí)行后test變成了全局變量。
<script> test = 5;//全局變量 function a(){ aa = 3;//也是全局變量 alert(test); } //a(); //輸出5 //alert(aa);//這里也可以方法a()方法里面的變量,因為aa是全局變量 </script>
聲明方式三:
使用window全局對象來聲明,全局對象的屬性對應(yīng)也是全局變量,詳細如下:
<script> window.test = 50; alert(test);//輸出50 </script>
這種方式經(jīng)常被用到一個匿名函數(shù)執(zhí)行后將一些函數(shù)公開到全局。 如JQuery1.5中最末一句
代碼如下:
window.jQuery = window.$ = jQuery;
全局變量的優(yōu)點:
可以減少變量的個數(shù),減少由于實際參數(shù)和形式參數(shù)的數(shù)據(jù)傳遞帶來的時間消耗。
全局變量的缺點:
(1)全局變量保存在靜態(tài)存貯區(qū),程序開始運行時為其分配內(nèi)存,程序結(jié)束釋放該內(nèi)存。與局部變量的動態(tài)分配、動態(tài)釋放相比,生存期比較長,因此過多的全局變量會占用較多的內(nèi)存單元。
(2)全局變量破壞了函數(shù)的封裝性能。函數(shù)象一個黑匣子,一般是通過函數(shù)參數(shù)和返回值進行輸入輸出,函數(shù)內(nèi)部實現(xiàn)相對獨立。但函數(shù)中如果使用了全局變量,那么函數(shù)體內(nèi)的語句就可以繞過函數(shù)參數(shù)和返回值進行存取,這種情況破壞了函數(shù)的獨立性,使函數(shù)對全局變量產(chǎn)生依賴。同時,也降低了該函數(shù)的可移植性。
(3)全局變量使函數(shù)的代碼可讀性降低。由于多個函數(shù)都可能使用全局變量,函數(shù)執(zhí)行時全局變量的值可能隨時發(fā)生變化,對于程序的查錯和調(diào)試都非常不利。
因此,如果不是萬不得已,最好不要使用全局變量。
相關(guān)文章
Javascript基礎(chǔ)教程之?dāng)?shù)據(jù)類型 (數(shù)值 Number)
本文講述的是javascript中九種數(shù)據(jù)類型的第二種--數(shù)值(Number),使用非常簡單,這里推薦給小伙伴們。2015-01-01使用RequireJS優(yōu)化JavaScript引用代碼的方法
這篇文章主要介紹了使用RequireJS優(yōu)化JavaScript引用代碼的方法,RequireJS是一款人氣JS庫,需要的朋友可以參考下2015-07-07javascript學(xué)習(xí)筆記整理(概述、變量、數(shù)據(jù)類型簡介)
這篇文章主要介紹了javascript學(xué)習(xí)筆記整理(概述-變量-數(shù)據(jù)類型),需要的朋友可以參考下2015-10-10實現(xiàn)網(wǎng)頁頁面跳轉(zhuǎn)的幾種方法(meta標簽、js實現(xiàn)、php實現(xiàn))
今天總結(jié)了幾種頁面跳轉(zhuǎn)的方法,分別是用meta標簽實現(xiàn)、用javascript實現(xiàn)、用php實現(xiàn),下面就來一一分享一下吧。2014-05-05Javascript學(xué)習(xí)筆記2 函數(shù)
在Javascript中,function才是Javascript的第一型。當(dāng)我們寫下一段函數(shù)時,其實不過是建立了一個function類型的實體。2010-01-01