網(wǎng)上對(duì)閉包的講解太多轻抱,生澀不好理解
為什么需要閉包?
設(shè)想一下旦部,如果你需要統(tǒng)計(jì)某項(xiàng)數(shù)據(jù)祈搜,且該數(shù)據(jù)應(yīng)該在所有函數(shù)都有效。那么士八,通常第一反應(yīng)是定義一個(gè)全局變量夭问。
var companyNameCount = 0;
function addcompanyName(){
companyNameCount += 1;
return companyNameCount;
}
addcompanyName();
addcompanyName();
但是問(wèn)題來(lái)了,companyNameCount 是全局變量曹铃,這意味著不經(jīng)過(guò)addcompanyName函數(shù)缰趋,也可以修改companyNameCount的值。那么陕见,我們應(yīng)該把companyNameCount定義為addcompanyName()函數(shù)的局部變量秘血,這樣才符合我們的本意,調(diào)用了addcompanyName()函數(shù)评甜,companyNameCount加一灰粮。
function addcompanyName(){
var?companyNameCount = 0;
companyNameCount += 1;
return companyNameCount;
}
addcompanyName();
addcompanyName();
這樣,又有問(wèn)題啊忍坷,companyNameCount是局部變量粘舟,這意味著它只能活在addcompanyName()函數(shù)里熔脂,對(duì)吧。每次調(diào)用addcompanyName()柑肴,companyNameCount會(huì)重新定義為0霞揉。
如此,往下看
你會(huì)發(fā)現(xiàn)
我
根本
沒(méi)
寫(xiě)
完