JS中的閉包和匿名函數(shù)

其實(shí)這兩個(gè)我也看了好多遍了但總是記不住!好氣哦但還是要保持學(xué)習(xí)的心態(tài),所以今天手寫理一遍,希望不會(huì)忘得一干二凈。

閉包

有權(quán)訪問另一個(gè)函數(shù)作用域中的變量的函數(shù)。
創(chuàng)建閉包的常見方式,就是在一個(gè)函數(shù)內(nèi)部創(chuàng)建另一個(gè)函數(shù)。
會(huì)攜帶包含它的函數(shù)的作用域,會(huì)比其他函數(shù)占用更多內(nèi)存。
會(huì)有內(nèi)存泄漏的問題。如果閉包作用域鏈中包含html元素,那就意味著無法被銷毀。
閉包只能取得包含函數(shù)中任何變量的最后一個(gè)值。

匿名函數(shù)

沒有名字的函數(shù): function () {};
使用function關(guān)鍵字聲明一個(gè)函數(shù),但未給函數(shù)命名,所以叫匿名函數(shù)。
立即執(zhí)行函數(shù)(function(){…})() 內(nèi)部定義的變量不會(huì)和外部的變量發(fā)生沖突

遇到一個(gè)題,可以借助這道題加深一下對(duì)閉包的認(rèn)識(shí):

寫一個(gè)count函數(shù),實(shí)現(xiàn)如下效果:

count()===1,
count()===2,
...
依次遞增。
不可以有和count同級(jí)的其他變量。

由題目條件可以看出,count函數(shù)必須是個(gè)立即執(zhí)行函數(shù),立即執(zhí)行函數(shù)有兩種:( function(){…} )()和( function (){…} () ),另外還要用到閉包,這樣才能實(shí)現(xiàn)遞增的效果。

下面是一個(gè)答案:

var count = (function() {  //立即執(zhí)行函數(shù)
    var i = 1;
    return function() { //閉包
        return i++;
    };
})() 

歡迎大家討論指正~~~

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容