文章目錄
-
- 1. 什麼是閉包?
- 2. 閉包的特點?(即優缺點)?
- 最後總結一下閉包的好處與壞處
-
- 好處
- 壞處
- 3. 閉包使用場景?
- 4. 面向過程程式設計思想?面向對象程式設計思想?(了解)
- IIFE: Immediately Invoked Function Expression
- 寬放大模式:
- 堆與棧
1. 什麼是閉包?
閉包就是能夠讀取其他函數内部變量的函數。換句話說:函數嵌套,内層函數就形成了閉包。
本質上說一個函數就是一個閉包。
2. 閉包的特點?(即優缺點)?
優點:閉包可以隔離作用域。不暴露私有成員的目的,減少了變量沖突的風險。
缺點: 局部變量會常駐在記憶體中,嚴重情況下會造成記憶體洩漏。
最後總結一下閉包的好處與壞處
好處
①保護函數内的變量安全 ,實作封裝,防止變量流入其他環境發生命名沖突
②在記憶體中維持一個變量,可以做緩存(但使用多了同時也是一項缺點,消耗記憶體)
③匿名自執行函數可以減少記憶體消耗
壞處
①其中一點上面已經有展現了,就是被引用的私有變量不能被銷毀,增大了記憶體消耗,造成記憶體洩漏,解決方法是可以在使用完變量後手動為它指派為null;
②其次由于閉包涉及跨域通路,是以會導緻性能損失,我們可以通過把跨作用域變量存儲在局部變量中,然後直接通路局部變量,來減輕對執行速度的影響
[詳情](https://www.cnblogs.com/itjeff/p/10106855.html)
3. 閉包使用場景?
閉包主要用來找到父級函數中對應變量的值。
4. 面向過程程式設計思想?面向對象程式設計思想?(了解)
面向過程程式設計就是分析出解決問題所需要的步驟,然後用函數把這些步驟一步一步實作,使用的時候一個一個依次調用就可以了。
優點:解題思路明确,按步驟解決,不易出錯,項目工期和成本友善控制。
缺點:中間某個步驟出錯,有可能造成整個項目崩潰,影響太大。
面向對象程式設計是把構成問題的事務分解成各個對象,建立對象的目的不是為了完成一個步驟,而是為了描叙某個事物在整個解決問題的步驟中的行為。
優點:面向對象程式設計核心是建構各種對象。友善從全局考慮問題。
缺點:在建構對象時一次性考慮不全,對象屬性和方法缺失。但有解決方案,可以使用繼承來解決。
閉封包檔:
https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Closures
https://blog.csdn.net/weixin_43586120/article/details/89456183
https://www.cnblogs.com/sandaizi/p/11582488.html
http://www.ruanyifeng.com/blog/2012/10/javascript_module.html
程式設計思想文檔:
https://blog.csdn.net/weixin_38638020/article/details/89318501
https://baike.baidu.com/item/面向過程/9957246
https://baike.baidu.com/item/面向對象程式設計/24792
IIFE: Immediately Invoked Function Expression
意為立即調用的函數表達式,也就是說,聲明函數的同時立即調用這個函數
放大模式: 使用場景:如果一個子產品很大,需要分成幾部分,或者一個子產品需要繼承另外一個
子產品,這個時候就可以采用放大模式.
寬放大模式:
在浏覽器環境中,子產品的各個部分通常都是從網上擷取的,有時無法知道哪一部分先加載
// 如果使用module2的寫法則會出現問題,這個時候可以考慮加載一個空的對象,
// 這種模式叫做 寬放大模式 與放大模式相比, 寬放大模式就是立刻執行函數的
// 參數可以是空對象,推薦這種寫法
堆與棧
簡單資料類型,在聲明的同時,回在棧中開辟一個空間,在進行指派操作時,會把自己的值複制一份穿給想要指派的變量。
對所指派的變量進行修改值的操作,不會影響原始變量的值,
引用資料類型,會把位址(16進制)放進棧記憶體中,而值回放進堆記憶體之中,在進行指派操作時,會把位址進行指派。
對所指派的變量進行修改值的操作,會影響原來的值。