javascript中運(yùn)用閉包和自執(zhí)行函數(shù)解決大量的全局變量問題
更新時(shí)間:2010年12月30日 19:56:15 作者:
做為一個(gè)javascript新手,為了程式的簡便,可能會在javascript中運(yùn)用了大量的全局變量,雖然一時(shí)看來,問題解決了,而且也可能讓編碼變得更加的簡單。
但是從全局看來,這樣會導(dǎo)致出現(xiàn)一些讓我們難以掌控的情況的出現(xiàn):變量同名、多個(gè)函數(shù)共用一個(gè)全局變量后的值的變換……等等。所以,有時(shí)候,對于一些簡單的全局變量,我們可以通過另一種方式來處理——用自執(zhí)行函數(shù)+閉包的方法來解:
比如:我們要在網(wǎng)頁加載時(shí)給出一個(gè)提示,在網(wǎng)頁關(guān)閉時(shí)給出另一個(gè)提示
下面的代碼,實(shí)現(xiàn)了以上功能
var msg1 = "歡迎光臨!"; // 定義一個(gè)全局變量
var msg2 = "再見!" //定了另一個(gè)全局變量
window.onload = function() {
alert(msg1);
}
window.onunload = function() {
alert(msg2);
}
這段代碼中已經(jīng)用到了兩個(gè)全局變量。而只是為了實(shí)現(xiàn)一個(gè)簡小的功能。
而且,全局變量太多,我們必須記住:msg1是歡迎時(shí)的變量,msg2是關(guān)閉時(shí)變量……如果變量更多,我們還能記得住嗎?
下面是同樣的功能,不過運(yùn)用了自執(zhí)行函數(shù)+閉包方法:
(function() {
var msg = "Hello, world!";
window.onload = function() {
alert(msg);
}
})();
(function() {
var msg = "Hello, world!";
window.onunload = function() {
alert(msg);
}
})();
后者做法,雖然代碼增長了,但是:
1)msg變量只在各自的自執(zhí)行函數(shù)內(nèi)有效。不會和其它全局變量之間產(chǎn)生混淆。
2)代碼的結(jié)構(gòu)變得更加的清晰。
3)解決了大量使用全局變量的情況。
以上只是本人的一點(diǎn)認(rèn)識,希望真正的高手給出點(diǎn)評!
比如:我們要在網(wǎng)頁加載時(shí)給出一個(gè)提示,在網(wǎng)頁關(guān)閉時(shí)給出另一個(gè)提示
下面的代碼,實(shí)現(xiàn)了以上功能
復(fù)制代碼 代碼如下:
var msg1 = "歡迎光臨!"; // 定義一個(gè)全局變量
var msg2 = "再見!" //定了另一個(gè)全局變量
window.onload = function() {
alert(msg1);
}
window.onunload = function() {
alert(msg2);
}
這段代碼中已經(jīng)用到了兩個(gè)全局變量。而只是為了實(shí)現(xiàn)一個(gè)簡小的功能。
而且,全局變量太多,我們必須記住:msg1是歡迎時(shí)的變量,msg2是關(guān)閉時(shí)變量……如果變量更多,我們還能記得住嗎?
下面是同樣的功能,不過運(yùn)用了自執(zhí)行函數(shù)+閉包方法:
復(fù)制代碼 代碼如下:
(function() {
var msg = "Hello, world!";
window.onload = function() {
alert(msg);
}
})();
(function() {
var msg = "Hello, world!";
window.onunload = function() {
alert(msg);
}
})();
后者做法,雖然代碼增長了,但是:
1)msg變量只在各自的自執(zhí)行函數(shù)內(nèi)有效。不會和其它全局變量之間產(chǎn)生混淆。
2)代碼的結(jié)構(gòu)變得更加的清晰。
3)解決了大量使用全局變量的情況。
以上只是本人的一點(diǎn)認(rèn)識,希望真正的高手給出點(diǎn)評!
相關(guān)文章
Javascript實(shí)現(xiàn)簡單二級下拉菜單實(shí)例
這篇文章主要介紹Javascript實(shí)現(xiàn)二級下拉菜單的具體過程,需要的朋友可以參考下2014-06-06數(shù)組Array進(jìn)行原型prototype擴(kuò)展后帶來的for in遍歷問題
不同的程序語言都有多種循環(huán)語句,而且功能是差不多的,當(dāng)然使用場合還是有些區(qū)別的,比如for與for in,for in比較好用,它不需要預(yù)先知道對象屬性的長度。2010-02-02深入理解javascript學(xué)習(xí)筆記(一) 編寫高質(zhì)量代碼
編寫高質(zhì)量JavaScript的一些要素,例如避免全局變量,使用單變量聲明,在循環(huán)中預(yù)緩存length(長度),遵循代碼閱讀,以及更多2012-08-08bootstrap datetimepicker日期插件使用方法
這篇文章主要為大家詳細(xì)介紹了bootstrap datetimepicker的使用方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-01-01JavaScript操作localStorage實(shí)現(xiàn)保存本地json文件
這篇文章主要為大家詳細(xì)介紹了JavaScript如何操作localStorage實(shí)現(xiàn)保存本地json文件,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2024-02-02