閉包就是可以讀取其餘函數內部變量的函數。閉包
使用閉包主要是爲了設計私有的方法和變量。函數
在本質上,閉包是將函數內部和函數外部鏈接起來的橋樑。spa
優勢:是能夠避免全局變量的污染。設計
缺點:是閉包會常駐內存,會增大內存使用量,使用不當很容易形成內存泄露。日誌
閉包的特色:code
1.函數嵌套函數對象
2.函數內部能夠引用外部的參數和變量blog
3.參數和變量不會被垃圾回收機制回收內存
垃圾回收機制與內存泄漏的意義字符串
垃圾回收機制:垃圾回收器按期掃描對象,並計算引用了每一個對象的其餘對象的數量。若是一個對象的引用數量爲 0(沒有其餘對象引用過該對象),或對該對象的唯一引用是循環的,那麼該對象的內存便可回收。
內存泄漏:內存泄漏指任何對象在您再也不擁有或須要它以後仍然存在。
會引發內存泄漏的有:閉包、控制檯日誌、循環(在兩個對象彼此引用且彼此保留時,就會產生一個循環) setTimeout的第一個參數是字符串不是函數
過多的使用閉包會引發內存泄漏
由於閉包引用着另外一個函數的變量,致使另外一個函數已經不使用了也沒法銷燬,因此閉包使用過多,會佔用較多的內存,這也是一個反作用。
function x(){ var i=0 function y(){ console.log(++i) } return y
//y嵌套在x中
//x返回y } var z=x() z()
//函數x外的變量z引用了函數x內的函數y