什么是閉包:
如果一個(gè)函數(shù)用到了它作用域外面的變量恐疲,那么這個(gè)變量和這個(gè)函數(shù)之間的環(huán)境就叫閉包腊满。
閉包的用途有些什么:
1.模仿塊級(jí)作用域
所謂塊級(jí)作用域就是指在循環(huán)中定義的變量套么,一旦循環(huán)結(jié)束,變量也隨之銷毀碳蛋,它的作用范圍只在這一小塊胚泌。而在JavaScript中沒(méi)有這樣的塊級(jí)作用域,由于JavaScript不會(huì)告訴你變量是否已經(jīng)被聲明肃弟,所以容易造成命名沖突玷室,如果在全局環(huán)境定義的變量,就會(huì)污染全局環(huán)境笤受,因此可以利用閉包的特性來(lái)模仿塊級(jí)作用域穷缤。
在上面的代碼中,閉包就是那個(gè)匿名函數(shù)箩兽,這個(gè)閉包可以當(dāng)函數(shù)X內(nèi)部的活動(dòng)變量津肛,又能保證自己內(nèi)部的變量在自執(zhí)行后直接銷毀。這種寫(xiě)法經(jīng)常用在全局環(huán)境中汗贫,可以避免添加太多全局變量和全局函數(shù)身坐,特別是多人合作開(kāi)發(fā)的時(shí)候,可以減少因此產(chǎn)生的命名沖突等落包,避免污染全局環(huán)境部蛇。
2.儲(chǔ)存變量
閉包的另一個(gè)特點(diǎn)是可以保存外部函數(shù)的變量,內(nèi)部函數(shù)保留了對(duì)外部函數(shù)的活動(dòng)變量的引用咐蝇,所以變量不會(huì)被釋放涯鲁。
這種寫(xiě)法可以用在把一些不經(jīng)常變動(dòng)計(jì)算起來(lái)又比較復(fù)雜的值保存起來(lái),節(jié)省每次的訪問(wèn)時(shí)間有序。
3.封裝私有變量
我們可以把函數(shù)當(dāng)作一個(gè)范圍撮竿,函數(shù)內(nèi)部的變量就是私有變量,在外部無(wú)法引用笔呀,但是我們可以通過(guò)閉包的特點(diǎn)來(lái)訪問(wèn)私有變量幢踏。