【Javascript】淺析JS中閉包的來龍去脈
一、閉包是什麼
閉包是一個引用關係,該引用關係存在函式內部中,引用的是外部函式變數物件。
當函式巢狀、內部函式引用外部變數、外部函式呼叫、內部執行函式定義時,閉包就會產生。
閉包產生 ——— 執行函式定義時產生閉包
閉包無產生 ——— 沒有產生內部函式的引用變數
二、閉包的本質
內部函式中的一個物件(非JS物件),收集閉包引用的變數(Closure)。
三、常見的閉包
1、函式的引數是另一個函式
2、函式的返回值是另一個函式
3、實現私有方法操作獨立屬性
四、閉包的作用
1、延長外部函式變數的生命週期
2、讓函式外部可以操作(讀寫)函式內部資料(變數、函式)
注:瀏覽器為了效能後期將外部函式中不被內部函式使用的變數清除
五、閉包缺點及解決
1、記憶體洩漏
是指程式在申請記憶體後,無法釋放已申請的記憶體空間就造成了記憶體洩漏,一次記憶體洩漏似乎不會有大的影響,但記憶體洩漏堆積後的後果就是記憶體溢位。
2、記憶體溢位
指程式申請記憶體時,沒有足夠的記憶體供申請者使用,或者說,一個杯子裡你非要裝一桶的水,那麼結果就是記憶體不夠用,即所謂的記憶體溢位,簡單來說就是自己所需要使用的空間比我們擁有的記憶體大記憶體不夠使用所造成的記憶體溢位。
3、解決
將內部函式成為垃圾物件,fn2=null
六、閉包的生命週期
1、產生
在巢狀內部函式定義完時就產生了,外部函式呼叫的時候
2、死亡
在巢狀的內部函式成為垃圾物件時
相關文章
- 關於View中mParent的來龍去脈View
- 淺析Block閉包BloC
- 從GAN到WGAN的來龍去脈
- 閉包 | 淺談JavaScript閉包問題JavaScript
- 淺談js閉包JS
- Alink漫談(四) : 模型的來龍去脈模型
- PHP Clourse(閉包類) 淺析PHP
- Android效能最佳化來龍去脈Android
- 深入淺出Javascript閉包JavaScript
- Linux 程式編譯過程的來龍去脈Linux編譯
- AI晶片行業發展的來龍去脈AI晶片行業
- 『MySQL』深入理解事務的來龍去脈MySql
- java閉包和回撥淺析Java
- Android效能優化來龍去脈總結Android優化
- js中的閉包JS
- 一文搞清楚 DNS 的來龍去脈DNS
- 理解 JavaScript 中的閉包JavaScript
- Javascript中的閉包encloureJavaScript
- JS中的 閉包(Closure)JS
- 淺析 JS 中的 Event LoopJSOOP
- 淺談JS作用域、this及閉包JS
- 淺談js的記憶體與閉包JS記憶體
- [原始碼解析]Oozie來龍去脈之提交任務原始碼
- HMM隱馬爾可夫模型來龍去脈(二)HMM隱馬爾可夫模型
- jmeter學習指南之分散式測試的來龍去脈JMeter分散式
- Cosmos 是什麼? 一文了解Cosmos的來龍去脈
- 一文講透CabloyJS全棧框架的來龍去脈JS全棧框架
- 淺析js中的Object.create()JSObject
- [譯]理解JS中的閉包JS
- 敲開遊戲引擎的大門,聊聊引擎的來龍去脈遊戲引擎
- 好程式設計師技術分享淺談JavaScript中的閉包程式設計師JavaScript
- 藉助 AIDL 理解 Android Binder 機制——Binder 來龍去脈AIAndroid
- [原始碼解析]Oozie來龍去脈之內部執行原始碼
- JavaScript 的閉包JavaScript
- javascript中的閉包closure詳解JavaScript
- [JavaScript閉包]Javascript閉包的判別,作用和示例JavaScript
- javascript中閉包是什麼JavaScript
- JavaScript閉包JavaScript