閉包的概念 :閉包就是能夠讀取其他函數(shù)內(nèi)部變量的函數(shù) 只有函數(shù)內(nèi)部的子函數(shù)才能讀取局部變量,因此可以把閉包簡單理解成"定義在一個函數(shù)內(nèi)部的函數(shù)" 所以,在本質(zhì)上,閉包就是將函數(shù)內(nèi)部和函數(shù)外部連接起來的一座橋梁。
閉包的使用場景:一個是可以讀取函數(shù)內(nèi)部的變量,另一個就是讓這些變量的值始終保持在內(nèi)存中(因為堆棧的棧里面 會自動清理沒有調(diào)用的變量 而閉包可以讓未使用的變量保存下去)
閉包的問題:由于閉包會使得函數(shù)中的變量都被保存在內(nèi)存中,內(nèi)存消耗很大,所以不能濫用閉包,否則會造成網(wǎng)頁的性能問題,在IE中可能導(dǎo)致內(nèi)存泄露。
解決方法是:在退出函數(shù)之前,將不使用的局部變量全部刪除。
function aa(){
var bs = "name"
return function(name){
// console.log(bs)
bs = name
console.log(bs) //undefined
}
}
// console.log(bs) // 報錯,bs is not defined
// aa()()
let option = aa()
option("zhangsan") //zhangsan