1.定義
? ? 官方對閉包的定義為:一個擁有許多變量和綁定了這些變量的環境的表達式(通常是一個函數),因而這些變量也是該表達式的一部分。
? ? 簡單的說,就是js允許函數內部定義函數或函數表達式,并且這些內部的函數可以訪問它所在的函數中的所有變量,參數和其他函數。當這些內部函數被它所在的函數之外的函數所引用時,就會形成閉包。
? ? 如下代碼,函數outer返回一個函數,closure引用了outer函數返回結果,那么closure就形成了閉包。同理,通過其它方式,將outer內部的函數引用到外部,也會形成閉包。
2.作用
?閉包在實際開發中的作用,總結出如下幾點:
1. 緩存
? ? 對于一些處理過程很耗時的函數,每次調用都會影響程序的性能,我們可以通過閉包的保存函數變量的特點,將函數的計算結果緩存起來,每次調用時,緩存中有則從緩存中取,沒有再調用。如下代碼:
2. 實現公有變量
? ? 如下代碼中的累加器,我們可以將result當做公有變量來訪問:
3. 實現封裝,屬性私有化
? ? 如下代碼,封裝了person中的name屬性,只能通過get和set方法訪問:
4. 模塊化開發,防止污染全局變量