閉包是什么
「函數(shù)」和「函數(shù)內(nèi)部能訪(fǎng)問(wèn)到的變量」(也叫環(huán)境)的總和缘挑,就是一個(gè)閉包。簡(jiǎn)單說(shuō)桶略,就是一個(gè)函數(shù)用到了它外面的變量语淘,這種用法叫閉包。
看個(gè)例子
function foo(){
var local =1
function bar(){
local +=1
return local
}
return bar
}
var func = foo()
func()
local 變量和 bar 函數(shù)組成了一個(gè)閉包际歼。
閉包的作用
閉包常常用來(lái)間接訪(fǎng)問(wèn)一個(gè)變量惶翻,換句話(huà)說(shuō),就是隱藏一個(gè)變量鹅心。
假設(shè)我們?cè)谧鲆粋€(gè)游戲吕粗,在寫(xiě)其中關(guān)于「還剩幾條命」的代碼。
如果不用閉包旭愧,你可以直接用一個(gè)全局變量:
var lives = 30
萬(wàn)一有人把這個(gè)改了怎么辦颅筋?用局部變量
但是用局部變量別人又訪(fǎng)問(wèn)不到,怎么辦呢输枯?
暴露一個(gè)訪(fǎng)問(wèn)器(函數(shù))议泵,讓別人可以「間接訪(fǎng)問(wèn)」
!function(){
var lives = 30
function award(){
lives += 1
}
function die(){
lives -= 1
}
}()
lives 變量和 award 函數(shù)組成了一個(gè)閉包,lives 變量和 die 函數(shù)又組成了一個(gè)閉包桃熄。