【Javascript】淺析JS中閉包的來龍去脈

_MindSet發表於2020-12-22

一、閉包是什麼

閉包是一個引用關係,該引用關係存在函式內部中,引用的是外部函式變數物件
函式巢狀、內部函式引用外部變數、外部函式呼叫、內部執行函式定義時,閉包就會產生。

閉包產生 ——— 執行函式定義時產生閉包
在這裡插入圖片描述
閉包無產生 ——— 沒有產生內部函式的引用變數
在這裡插入圖片描述

二、閉包的本質

內部函式中的一個物件(非JS物件),收集閉包引用的變數(Closure)。

三、常見的閉包

1、函式的引數是另一個函式
2、函式的返回值是另一個函式
3、實現私有方法操作獨立屬性

四、閉包的作用

1、延長外部函式變數的生命週期
2、讓函式外部可以操作(讀寫)函式內部資料(變數、函式)
注:瀏覽器為了效能後期將外部函式中不被內部函式使用的變數清除

五、閉包缺點及解決

1、記憶體洩漏

是指程式在申請記憶體後,無法釋放已申請的記憶體空間就造成了記憶體洩漏,一次記憶體洩漏似乎不會有大的影響,但記憶體洩漏堆積後的後果就是記憶體溢位。

2、記憶體溢位

指程式申請記憶體時,沒有足夠的記憶體供申請者使用,或者說,一個杯子裡你非要裝一桶的水,那麼結果就是記憶體不夠用,即所謂的記憶體溢位,簡單來說就是自己所需要使用的空間比我們擁有的記憶體大記憶體不夠使用所造成的記憶體溢位。

3、解決

將內部函式成為垃圾物件,fn2=null

六、閉包的生命週期

1、產生

在巢狀內部函式定義完時就產生了,外部函式呼叫的時候

2、死亡

巢狀的內部函式成為垃圾物件

相關文章