javascript中運(yùn)用閉包和自執(zhí)行函數(shù)解決大量的全局變量問(wèn)題
更新時(shí)間:2010年12月30日 19:56:15 作者:
做為一個(gè)javascript新手,為了程式的簡(jiǎn)便,可能會(huì)在javascript中運(yùn)用了大量的全局變量,雖然一時(shí)看來(lái),問(wèn)題解決了,而且也可能讓編碼變得更加的簡(jiǎn)單。
但是從全局看來(lái),這樣會(huì)導(dǎo)致出現(xiàn)一些讓我們難以掌控的情況的出現(xiàn):變量同名、多個(gè)函數(shù)共用一個(gè)全局變量后的值的變換……等等。所以,有時(shí)候,對(duì)于一些簡(jiǎn)單的全局變量,我們可以通過(guò)另一種方式來(lái)處理——用自執(zhí)行函數(shù)+閉包的方法來(lái)解:
比如:我們要在網(wǎng)頁(yè)加載時(shí)給出一個(gè)提示,在網(wǎng)頁(yè)關(guān)閉時(shí)給出另一個(gè)提示
下面的代碼,實(shí)現(xiàn)了以上功能
var msg1 = "歡迎光臨!"; // 定義一個(gè)全局變量
var msg2 = "再見(jiàn)!" //定了另一個(gè)全局變量
window.onload = function() {
alert(msg1);
}
window.onunload = function() {
alert(msg2);
}
這段代碼中已經(jīng)用到了兩個(gè)全局變量。而只是為了實(shí)現(xiàn)一個(gè)簡(jiǎn)小的功能。
而且,全局變量太多,我們必須記住:msg1是歡迎時(shí)的變量,msg2是關(guān)閉時(shí)變量……如果變量更多,我們還能記得住嗎?
下面是同樣的功能,不過(guò)運(yùn)用了自執(zhí)行函數(shù)+閉包方法:
(function() {
var msg = "Hello, world!";
window.onload = function() {
alert(msg);
}
})();
(function() {
var msg = "Hello, world!";
window.onunload = function() {
alert(msg);
}
})();
后者做法,雖然代碼增長(zhǎng)了,但是:
1)msg變量只在各自的自執(zhí)行函數(shù)內(nèi)有效。不會(huì)和其它全局變量之間產(chǎn)生混淆。
2)代碼的結(jié)構(gòu)變得更加的清晰。
3)解決了大量使用全局變量的情況。
以上只是本人的一點(diǎn)認(rèn)識(shí),希望真正的高手給出點(diǎn)評(píng)!
比如:我們要在網(wǎng)頁(yè)加載時(shí)給出一個(gè)提示,在網(wǎng)頁(yè)關(guān)閉時(shí)給出另一個(gè)提示
下面的代碼,實(shí)現(xiàn)了以上功能
復(fù)制代碼 代碼如下:
var msg1 = "歡迎光臨!"; // 定義一個(gè)全局變量
var msg2 = "再見(jiàn)!" //定了另一個(gè)全局變量
window.onload = function() {
alert(msg1);
}
window.onunload = function() {
alert(msg2);
}
這段代碼中已經(jīng)用到了兩個(gè)全局變量。而只是為了實(shí)現(xiàn)一個(gè)簡(jiǎn)小的功能。
而且,全局變量太多,我們必須記住:msg1是歡迎時(shí)的變量,msg2是關(guān)閉時(shí)變量……如果變量更多,我們還能記得住嗎?
下面是同樣的功能,不過(guò)運(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);
}
})();
后者做法,雖然代碼增長(zhǎng)了,但是:
1)msg變量只在各自的自執(zhí)行函數(shù)內(nèi)有效。不會(huì)和其它全局變量之間產(chǎn)生混淆。
2)代碼的結(jié)構(gòu)變得更加的清晰。
3)解決了大量使用全局變量的情況。
以上只是本人的一點(diǎn)認(rèn)識(shí),希望真正的高手給出點(diǎn)評(píng)!
相關(guān)文章
JS實(shí)現(xiàn)table表格數(shù)據(jù)排序功能(可支持動(dòng)態(tài)數(shù)據(jù)+分頁(yè)效果)
這篇文章主要介紹了JS實(shí)現(xiàn)table表格數(shù)據(jù)排序功能(可支持動(dòng)態(tài)數(shù)據(jù)+分頁(yè)效果) 的相關(guān)資料,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友一起看看吧2016-05-05
JavaScript實(shí)現(xiàn)的3D旋轉(zhuǎn)魔方動(dòng)畫效果實(shí)例代碼
在本篇文章里小編給大家整理了關(guān)于JavaScript實(shí)現(xiàn)的3D旋轉(zhuǎn)魔方動(dòng)畫效果實(shí)例代碼,有興趣的朋友們測(cè)試下。2019-07-07
通過(guò)示例演示理解javascript預(yù)解析
這篇文章主要為大家介紹了通過(guò)示例演示理解javascript預(yù)解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步早日升職加薪2022-03-03
bootstrap實(shí)現(xiàn)嵌套模態(tài)框的實(shí)例代碼
這篇文章主要介紹了bootstrap實(shí)現(xiàn)嵌套模態(tài)框的實(shí)例代碼,代碼簡(jiǎn)單易懂,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-01-01
詳解微信小程序中數(shù)據(jù)雙向綁定如何實(shí)現(xiàn)
最近在小程序的開(kāi)發(fā)過(guò)程中,需要用到雙向綁定,遇到報(bào)錯(cuò)才知道微信本身是不支持對(duì)象雙向綁定的,鏖戰(zhàn)一番找到解決方案,下面這篇文章主要給大家介紹了關(guān)于微信小程序中數(shù)據(jù)雙向綁定如何實(shí)現(xiàn)的相關(guān)資料,需要的朋友可以參考下2023-05-05

