閉包
1.定義: 函數內部有函數(函數嵌套),內部函數操作外部函數的局部變量,且外層函數的引用被賦值給變量,通過變量訪問內層函數匿名函數.
2.作用:1.可以讀取函數內部的變量,2.讓這些變量的值始終保持在內存中,不會在f1調用後被自動清除。
3.應用場景:循環綁定事件 .主要用於封裝jQuery插件,開發中用的少.
4.優點:避免變量污染.
5.缺點:閉包會使得函數中的變量都被保存在內存中,內存消耗很大,所以不能濫用閉包,否則會造成網頁的性能問題,在IE中可能導致內存泄露。解決方法是,在退出函數之前,將不使用的局部變量全部刪除。
遞歸:
定義:遞歸函數是在一個函數通過函數名字調用自身的函數(函數自調用)。
應用場景:維護table列表組建,做了一個表頭篩選的功能。其中就需要獲取篩選項,當有多個篩選項數組都需要從後臺獲取的時候,就需要循環數組發送ajax請求,但是由於ajax是異步的。多個請求就無法正常處理返回。
所以使用遞歸,在ajax的回調中重新調用他:
優點:
簡潔,在遍歷算法中,遞歸的實現明顯要比循環簡單得多
缺點:
1.存在時間和空間的消耗,
2.調用棧可能會溢出.影響性能.
閉包與遞歸的區別:
相同點:1)都是函數
2)在函數的內部都會調用函數
不同點: 1)閉包函數調用的內部函數需要引用外部函數的變量、參數;遞歸函數是自己調用自己,不需要引用變量、參數
2)閉包函數調用一次結束調用,遞歸函數在滿足遞歸條件時需要多次調用
3)閉包函數會比其他函數更佔內存