一.? 構(gòu)成閉包的必要條件有三個(gè)
? ? ?1.外部函數(shù)的局部變量被內(nèi)部函數(shù)引用
? ? ? 2.執(zhí)行外部函數(shù)時(shí)內(nèi)部函數(shù)立刻執(zhí)行
? ? ? 3. 通過(guò)外部函數(shù)訪問(wèn)未被釋放的局部變量
二. 使用場(chǎng)景:
?????1. 為保護(hù)變量不受污染
? ? ? 2. 為循環(huán)調(diào)用時(shí)保留局部變量
例子:
function?callLater(paramA,?paramB,?paramC)?{??
????????????return?(function?()?{??
????????????????paramA[paramB]?=?paramC;??
????????????});??
? }??
var?funcRef?=?callLater(elStyle,?"display",?"none");??
?hideMenu?=?setTimeout(funcRef,?500);??
可以調(diào)用另一個(gè)函數(shù)來(lái)返回一個(gè)內(nèi)部函數(shù)的調(diào)用拍嵌,將那個(gè)內(nèi)部函數(shù)對(duì)象的引用傳遞給setTimeout函數(shù)。內(nèi)部函數(shù)執(zhí)行時(shí)需要的參數(shù)胁黑,在調(diào)用外部函數(shù)時(shí)傳遞給它丑念。setTimeout在執(zhí)行內(nèi)部函數(shù)時(shí)無(wú)需傳遞參數(shù),因?yàn)閮?nèi)部函數(shù)仍然能夠訪問(wèn)外部函數(shù)調(diào)用時(shí)提供的參數(shù)
三.? 缺點(diǎn)明顯, 局部變量由于一直被引用而無(wú)法釋放鹉勒,造成內(nèi)存垃圾钞速。