什么是閉包:
如果一個函數用到了它作用域外面的變量,那么這個變量和這個函數之間的環(huán)境就叫閉包。

閉包的用途有些什么:
1.模仿塊級作用域
所謂塊級作用域就是指在循環(huán)中定義的變量,一旦循環(huán)結束,變量也隨之銷毀,它的作用范圍只在這一小塊。而在JavaScript中沒有這樣的塊級作用域,由于JavaScript不會告訴你變量是否已經被聲明,所以容易造成命名沖突,如果在全局環(huán)境定義的變量,就會污染全局環(huán)境,因此可以利用閉包的特性來模仿塊級作用域。

在上面的代碼中,閉包就是那個匿名函數,這個閉包可以當函數X內部的活動變量,又能保證自己內部的變量在自執(zhí)行后直接銷毀。這種寫法經常用在全局環(huán)境中,可以避免添加太多全局變量和全局函數,特別是多人合作開發(fā)的時候,可以減少因此產生的命名沖突等,避免污染全局環(huán)境。
2.儲存變量
閉包的另一個特點是可以保存外部函數的變量,內部函數保留了對外部函數的活動變量的引用,所以變量不會被釋放。

這種寫法可以用在把一些不經常變動計算起來又比較復雜的值保存起來,節(jié)省每次的訪問時間。
3.封裝私有變量
我們可以把函數當作一個范圍,函數內部的變量就是私有變量,在外部無法引用,但是我們可以通過閉包的特點來訪問私有變量。
