千鋒教育JavaScript全套視頻教程(10天學會Js,前端javascrip

閉包的定義
一個函數(shù)的執(zhí)行空間以及環(huán)境中所在的局部變量。
??代碼舉例及運行結(jié)果如下:
- function fn(){
- let a=10;
- return function(){
- console.log(a);
- }
- }
- const closure=fn();
- closure();
- console.log(a);
能訪問到局部變量的原因:
JS的垃圾回收機制
?JS中內(nèi)存為自動分配。垃圾回收方法有引用計數(shù)和標記清理。其中引用計數(shù)原理為統(tǒng)計引用次數(shù)確定該部分內(nèi)存是否回收,由于弊端太多所以不經(jīng)常使用。而目前主流的標記清理為將未被引用的變量標記,并清理。
以上面代碼為例,全局變量closure引用為renturn的匿名函數(shù),而這個匿名函數(shù)中涉及到了對于局部變量a的引用。由于這樣一系列的引用,導致了系統(tǒng)在垃圾回收時這些內(nèi)存空間無法回收銷毀,這就能夠訪問到了。
閉包的優(yōu)點
1.局部變量能夠常駐內(nèi)存,隨時可以訪問。
2.不會污染全局變量名稱定義。
3.通過閉包可以構(gòu)造私有變量,而私有變量不能直接訪問,只能通過閉包函數(shù)訪問操作,確保了數(shù)據(jù)安全。
閉包的缺點
由于局部變量能夠常駐內(nèi)存,這就導致無法及時釋放內(nèi)存空間,導致整體內(nèi)存空間減少,也即內(nèi)存泄漏。
內(nèi)存泄漏的處理
在確定不再使用閉包時,將保存閉包引用的變量設(shè)為null。
標簽: