JavaScript 閉包在封裝函數(shù)時的簡單分析
更新時間:2009年11月28日 01:54:47 作者:
近才開始系統(tǒng)的研究js,對js的興趣源于對JQuery的應(yīng)用。之前只會用js做簡單的計算函數(shù),后來由于需要做特效,故接觸JQ,看著API,基本的特效都能完成,但相反,如果用js去實(shí)現(xiàn),估計自己很難寫得出來,所以下定決心系統(tǒng)的看看js。
wbkt2t最近發(fā)現(xiàn)了一個新名詞:閉包。(自己落后了,要好好學(xué)習(xí)才行),baidu、google看了一下原理和實(shí)例,也明白了閉包的強(qiáng)大。JQuery也把閉包發(fā)揚(yáng)光大了,網(wǎng)上一些個人開發(fā)的框架都是用了閉包了功能。知道了閉包的原理和使用發(fā)放,于是自己小小試驗(yàn)了一把,帶著疑惑:使用閉包有什么好處?不使用會出現(xiàn)什么后果?寫下了以下代碼,也希望大家給小弟一些解答
使用閉包:
實(shí)例1
var $Darren;
(function(){
var Obj={version:"1.0",author:"Darren"};
Obj.Add=function(arg1,arg2){
return (arg1+arg2);
}
Obj.Multi=function(arg1,arg2){
return (arg1*arg2);
}
$Darren=Obj;
})(); //匿名函數(shù),并使其馬上執(zhí)行
alert($Darren.Add(6,2)); //結(jié)果 8
alert($Darren.Multi(3,5)); //結(jié)果15
不使用閉包代碼:
實(shí)例2
var $Darren2={version:"1.0",author:"Darren"};
$Darren2.Add=function(arg1,arg2){
return (arg1+arg2);
}
$Darren2.Multi=function(arg1,arg2){
return (arg1*arg2);
}
alert($Darren2.Add(6,2)); //結(jié)果 8
alert($Darren2.Multi(3,5)); //結(jié)果15
我的理解是:
.使用閉包后可以防止命名沖突,如在實(shí)例1中,如果$Darren變量沖突只需改兩處地方,而在實(shí)例2中,如果$Darren2變量沖突則需該多處(這里是3處)
.使用閉包后,即使匿名函數(shù)執(zhí)行完畢,但是還可以使用其內(nèi)部的函數(shù)。
還有我有個疑惑就是:
為什么大家都推薦實(shí)例1的寫法,實(shí)例1和實(shí)例2哪個更好,為什么?一樣能實(shí)現(xiàn)的功能。
希望大家指點(diǎn)小弟,這樣理解對不對?
還有什么補(bǔ)充的。
謝謝大家~~~
使用閉包:
實(shí)例1
復(fù)制代碼 代碼如下:
var $Darren;
(function(){
var Obj={version:"1.0",author:"Darren"};
Obj.Add=function(arg1,arg2){
return (arg1+arg2);
}
Obj.Multi=function(arg1,arg2){
return (arg1*arg2);
}
$Darren=Obj;
})(); //匿名函數(shù),并使其馬上執(zhí)行
alert($Darren.Add(6,2)); //結(jié)果 8
alert($Darren.Multi(3,5)); //結(jié)果15
不使用閉包代碼:
實(shí)例2
復(fù)制代碼 代碼如下:
var $Darren2={version:"1.0",author:"Darren"};
$Darren2.Add=function(arg1,arg2){
return (arg1+arg2);
}
$Darren2.Multi=function(arg1,arg2){
return (arg1*arg2);
}
alert($Darren2.Add(6,2)); //結(jié)果 8
alert($Darren2.Multi(3,5)); //結(jié)果15
我的理解是:
.使用閉包后可以防止命名沖突,如在實(shí)例1中,如果$Darren變量沖突只需改兩處地方,而在實(shí)例2中,如果$Darren2變量沖突則需該多處(這里是3處)
.使用閉包后,即使匿名函數(shù)執(zhí)行完畢,但是還可以使用其內(nèi)部的函數(shù)。
還有我有個疑惑就是:
為什么大家都推薦實(shí)例1的寫法,實(shí)例1和實(shí)例2哪個更好,為什么?一樣能實(shí)現(xiàn)的功能。
希望大家指點(diǎn)小弟,這樣理解對不對?
還有什么補(bǔ)充的。
謝謝大家~~~
您可能感興趣的文章:
- 再次更新!MSClass (Class Of Marquee Scroll通用不間斷滾動JS封裝類 Ver 1.6)
- Class Of Marquee Scroll通用不間斷滾動JS封裝類
- Jquery作者John Resig自己封裝的javascript 常用函數(shù)
- Javascript匿名函數(shù)的一種應(yīng)用 代碼封裝
- javascript的函數(shù)、創(chuàng)建對象、封裝、屬性和方法、繼承
- 封裝了一個js圖片輪換效果的函數(shù)
- javascript面向?qū)ο蟀b類Class封裝類庫剖析
- 原生Javascript封裝的一個AJAX函數(shù)分享
- js時間日期格式化封裝函數(shù)
- 詳解js中class的多種函數(shù)封裝方法
相關(guān)文章
bootstrapTable+ajax加載數(shù)據(jù) refresh更新數(shù)據(jù)
這篇文章主要為大家詳細(xì)介紹了bootstrapTable+ajax加載數(shù)據(jù),以及refresh更新數(shù)據(jù),具有一定的參考價值,感興趣的小伙伴們可以參考一下2018-08-08
js列舉css中所有圖標(biāo)的實(shí)現(xiàn)代碼
最近在做一個通用的配置模塊。配置模塊中必然要對系統(tǒng)的菜單、功能模塊、權(quán)限資源等進(jìn)行配置,為了更好的用戶體驗(yàn),圖標(biāo)是必不可少的!2011-07-07
基于JavaScript實(shí)現(xiàn)交互式博客
在Web開發(fā)中,JavaScript(JS)是一種至關(guān)重要的編程語言,它使網(wǎng)頁具有交互性,本文主要介紹了如何使用JavaScript實(shí)現(xiàn)一個交互式博客,需要的可以了解下2024-01-01

