函數的閉包

閉包就是可以讀取其餘函數內部變量的函數。閉包

使用閉包主要是爲了設計私有的方法和變量。函數

在本質上,閉包是將函數內部和函數外部鏈接起來的橋樑。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

 

相關文章
相關標籤/搜索