閉包 closure
引用了自由變量的函數(shù)(自由變量就是跨作用域的變量, 會一同存在即使離開也會)被外部訪問
形成閉包條件(形成閉包的函數(shù)必須被外部變量引用(16)扶镀,在函數(shù)中一定要訪問外部函數(shù)的局部變量(10))
image.png
按理來說如果使用var let const在函數(shù)當中蕴侣,此時就變?yōu)榫植孔兞浚挥性趦?nèi)部才能訪問到臭觉。
并且當退出函數(shù)時就會隨函數(shù)調(diào)用的結(jié)束而消失昆雀。
var eat = function(){
var food = 'cake'
console.log(food)
}
eat(); // food
console.log(food) // Uncaught ReferenceError: food is not defined
而我們閉包的函數(shù)在執(zhí)行var look = eat()時反悔了匿名函數(shù)的引用,所以food就一直在環(huán)境中不會被銷毀
所以我們在這里就可以引出閉包的第一個好處就是延續(xù)局部變量的生命周期蝠筑。
并且閉包可以幫我們把一些大函數(shù)的代碼塊獨立出來狞膘。如果這些代碼塊不需要復(fù)用就可以用閉包封閉起來。