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