1、閉包是什麼?
閉包是指那些引用了另一個函數作用域中變量的函數,通常是在嵌套函數中實現的。(函數套函數)
function fn() { let n = 123; } console.log(n); //此時會報錯 n is not defined
function fn() { let n = 123; return function() { console.log(n) } } console.log(fn()); //此時控制檯會返回一個匿名函數;如下圖:
這個被return返回的匿名函數就是閉包。
2、閉包的功能
1.在函數外訪問函數內的值
function fn() { let n = 123; return function() { console.log(n) } } let f = fn() f();
此時就可以在函數外部獲得n的值。(延長了變量的生命週期)
2.保持使用不被垃圾回收
=>如果有被使用會保持佔用內存,如果沒有引用會被清理掉。
3、閉包可能造成的問題及解決方法
問題:閉包可能會造成內存泄漏
解決方法:在推出函數前將不使用的變量賦值爲null
4、所有的函數都是閉包,因爲都是window對象的屬性。