javascript 閉包詳解
javascript 閉包是一個(gè)很有趣的東東。看了些相關(guān)資料http://www.dbjr.com.cn/article/29472.htm,對(duì)其印象最深刻的是:實(shí)現(xiàn)了public 和private。
創(chuàng)建一個(gè)非匿名閉包最簡(jiǎn)單的語(yǔ)法是:
var obj = (function(){//各種代碼 });
閉包最經(jīng)典的例子:
var makeCounter = (function () {
var i = 1;
this.test=function(){
console.log(i);
i++;
}
return this;
});
var obj = makeCounter();
obj.test(); // 1
obj.test(); // 2
var obj1 = makeCounter();
obj1.test(); // 1
obj1.test(); // 2
private 與 public :
var makeCounter= (function () {
var i = 1;
//這貨是private的
function log(){
console.log(i);
i++;
}
//這貨是public的
this.test(){
log();
}
return this;
});
var obj = makeCounter();
obj.test(); // 1
obj.test(); // 2
obj.log(); //undefined
自執(zhí)行函數(shù):
第一次看到這樣的代碼時(shí)的感覺(jué)是:好高級(jí);
var obj = (function(window){
//各種代碼
}(window));
然后google了下,發(fā)現(xiàn)他們經(jīng)常都會(huì)這樣寫(xiě):
var obj= (function () {
var i = 1;
this.test=function(){
console.log(i);
i++;
}
return this;
}());
obj.test(); // 1
obj.test(); // 2
最簡(jiǎn)單的理解,程序員偷懶把兩步寫(xiě)成了一步。
//這是一個(gè)函數(shù)。它應(yīng)該這樣用obj()
var makeCounter = function () {
//各種代碼
}
//這是一個(gè)對(duì)象。它類(lèi)似于 var obj = makeCounter();
var obj = (function () {
//各種代碼
}());
它也可以有參數(shù):
var output = "new test";
var obj = (function (msg) {
this.test = function(){
console.log(msg);
}
return this;
}(output));
obj.test();
它還可以更復(fù)雜更高級(jí)點(diǎn):
var output = "new test";
var obj = (function (obj, msg) {
//這貨也是私有的。類(lèi)似obj.i(!=obj.i),卻又不是obj.i(因?yàn)橥獠坎豢稍L問(wèn))。
var i = 1;
//private
function log() {
console.log(i + " : " + msg);
i++;
}
//public
obj.test = function () {
log();
}
return obj;
}(obj, output));
obj.test(); // 1 : new test
obj.i = 100;
//i沒(méi)被改變
obj.test(); // 2 : new test
初次見(jiàn)面,留下了很深刻的印象。閉包的使用,實(shí)現(xiàn)了狀態(tài),屬性的保持;避免了全局變量滿(mǎn)屏飛舞;結(jié)束了變量老是被重定義,重賦值的尷尬局面。它還可以將一個(gè)對(duì)象分部到多個(gè)js文件。實(shí)在是太好了。
上面所述就是本文的全部?jī)?nèi)容了,希望大家能夠喜歡。
- javascript深入理解js閉包
- 深入理解Javascript閉包 新手版
- Javascript閉包演示代碼小結(jié)
- javascript的閉包介紹(司徒正美)
- JavaScript 匿名函數(shù)(anonymous function)與閉包(closure)
- JavaScript閉包 懂不懂由你反正我是懂了
- JavaScript 高級(jí)篇之閉包、模擬類(lèi),繼承(五)
- Javascript 閉包引起的IE內(nèi)存泄露分析
- JavaScript中的作用域鏈和閉包
- 深入Javascript函數(shù)、遞歸與閉包(執(zhí)行環(huán)境、變量對(duì)象與作用域鏈)使用詳解
- javascript閉包傳參和事件的循環(huán)綁定示例探討
- 詳談JavaScript 匿名函數(shù)及閉包
- JavaScript閉包詳解
相關(guān)文章
php main 與 iframe 相互通訊類(lèi)(js+php同域/跨域)
這篇文章主要介紹了php main 與 iframe 相互通訊類(lèi)(js+php同域/跨域),需要的朋友可以參考下2017-09-09JS判斷鍵盤(pán)是否按的回車(chē)鍵并觸發(fā)指定按鈕點(diǎn)擊操作的方法
下面小編就為大家?guī)?lái)一篇JS判斷鍵盤(pán)是否按的回車(chē)鍵并觸發(fā)指定按鈕點(diǎn)擊操作的方法。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-02-02JavaScript為內(nèi)置對(duì)象添加原型方法實(shí)現(xiàn)
這篇文章主要介紹了JavaScript為內(nèi)置對(duì)象添加原型方法實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2021-05-05使用微信小程序API,調(diào)用微信的各種內(nèi)置能力。
微信小程序如何使用小程序API,去調(diào)用微信提供的各種內(nèi)置能力(即微信API)。小程序開(kāi)發(fā)框架提供豐富的微信原生API,可以方便的調(diào)起微信提供的能力,如獲取用戶(hù)信息,本地存儲(chǔ),支付功能等。2022-12-12異步動(dòng)態(tài)加載JS并運(yùn)行(示例代碼)
這篇文章主要是對(duì)異步動(dòng)態(tài)加載JS并運(yùn)行的示例代碼進(jìn)行了介紹。需要的朋友可以過(guò)來(lái)參考下,希望對(duì)大家有所幫助2013-12-12js+css實(shí)現(xiàn)飛機(jī)大戰(zhàn)游戲
這篇文章主要為大家詳細(xì)介紹了js+css實(shí)現(xiàn)飛機(jī)大戰(zhàn)游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-05-05JavaScript實(shí)現(xiàn)瀑布流布局的代碼分享
不知道大家在線(xiàn)上購(gòu)物的時(shí)候有沒(méi)有發(fā)現(xiàn)到,自己逛起來(lái)根本就停不下來(lái),越往下翻越是覺(jué)得就會(huì)出現(xiàn)需要的東西,這就是很多電商公司都在使用的瀑布流布局。本文就來(lái)用JS實(shí)現(xiàn)這一布局,需要的可以參考一下2023-04-04javascript實(shí)現(xiàn)根據(jù)漢字獲取簡(jiǎn)拼
這里給大家分享一個(gè)JavaScript實(shí)現(xiàn)的根據(jù)漢字可以自動(dòng)轉(zhuǎn)換簡(jiǎn)拼代碼,有需要的朋友可以參考一下,并非本人原創(chuàng)來(lái)自網(wǎng)絡(luò)。2016-09-09基于JS實(shí)現(xiàn)密碼框(password)中顯示文字提示功能代碼
這篇文章主要介紹了實(shí)現(xiàn)密碼框(password)中顯示文字提示功能代碼,在項(xiàng)目開(kāi)發(fā)中經(jīng)常會(huì)用到,需要的朋友可以參考下2016-05-05