閉包是什么?
閉包是指程序中有許多白能量和綁定變量的執(zhí)行環(huán)境。
在我看來(lái)就是:程序的代碼段允許存在一級(jí)函數(shù)并且一級(jí)函數(shù)不能被釋放,以及韓你數(shù)沒(méi)有釋放之前,外部可以使用一級(jí)函數(shù)的局部變量。
簡(jiǎn)單的說(shuō)閉包就是在外部可以使用局部變量。
閉包的功能:
1、外部可以使用局部變量
2、使函數(shù)不能釋放
為什么一級(jí)函數(shù)不能被釋放?
因?yàn)樵谝患?jí)函數(shù)中有一個(gè)函數(shù),這個(gè)函數(shù)使用了一級(jí)函數(shù)的變量,我們返回了這個(gè)函數(shù)并創(chuàng)建一個(gè)變量接收了。
那么這個(gè)函數(shù)就不會(huì)被js的垃圾回收機(jī)制銷毀。
閉包的應(yīng)用:
一般的項(xiàng)目中,閉包的使用比較少。當(dāng)我們?nèi)シ庋b一個(gè)第三方庫(kù)時(shí),會(huì)大量使用閉包。
閉包的優(yōu)缺點(diǎn):
優(yōu)點(diǎn):
1、一個(gè)變量可以長(zhǎng)期駐扎在內(nèi)存中
2、 避免全局變量的污染
3、私有成員的存在
缺點(diǎn):常駐內(nèi)存,會(huì)增大內(nèi)存的使用量,使用不當(dāng)很容易造成內(nèi)存泄漏。
外部會(huì)修改局部變量,會(huì)大量占用內(nèi)存,內(nèi)存不會(huì)被釋放。
閉包的一種寫(xiě)法:
<script>
//函數(shù)在調(diào)用時(shí),會(huì)開(kāi)辟一塊內(nèi)存空間,這塊內(nèi)存空間在函數(shù)執(zhí)行完畢時(shí)釋放;
function fn(){
var a = 1;
return function (){
alert(a++);
}
}
//a 是fn返回的二級(jí)函數(shù)
var a = fn();
a(); //返回 1 //此時(shí),我們?cè)谕饨缇褪怯玫搅薴n的局部變量
a(); //返回2
var b = fn();
b();//返回1
b();//返回2
</script>