其實(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++;
};
})()
歡迎大家討論指正~~~