定義:閉包 當一個函數的返回值是另外一個函數,而返回的那個函數如果調用了其父函數內部的變量,且返回的這個函數在外部被執行 就產生了閉包.閉包是一個環境,具體指的就是外部函數--高階函數。
說白了就是一個環境,能夠讀取其他函數內部的變量。
本質上,閉包是將函數內部和函數外部連接起來的橋梁。
用處:1.讀取函數內部的變量;
2.這些變量的值始終保持在內存中,不會在外層函數調用后被自動清除。
優點:1:變量長期駐扎在內存中;
2:避免全局變量的污染;
3:私有成員的存在 ;
特性:1:函數套函數;
2:內部函數可以直接使用外部函數的局部變量或參數;
3:變量或參數不會被垃圾回收機制回收 GC;
缺點:
常駐內存 會增大內存的使用量 使用不當會造成內存泄露,詳解:
(1)由於閉包會使得函數中的變量都被保存在內存中,內存消耗很大,所以不能濫用閉包,否則會造成網頁的性能問題,在IE中可能導致內存泄露。解決方法是,在退出函數之前,將不使用的局部變量全部刪除。
(2)閉包會在父函數外部,改變父函數內部變量的值。所以,如果你把父函數當作對象(object)使用,把閉包當作它的公用方法(Public Method),把內部變量當作它的私有屬性(private value),這時一定要小心,不要隨便改變父函數內部變量的值。