半個(gè)月沒寫博文了,最近一直在弄小程序,感覺也沒啥好寫的。

之前讀了js權(quán)威指南,也寫了篇博文,但是實(shí)話實(shí)說(shuō)當(dāng)初看閉包確實(shí)還是一頭霧水?,F(xiàn)在時(shí)隔一個(gè)多月(當(dāng)然這一段時(shí)間還是一直有在看閉包的相關(guān)知識(shí))理解就更深入了一點(diǎn),下面說(shuō)說(shuō)我的理解。

1 function fn(){2    var a = 0;3    return function (){4         return ++a;5    }    
6 }

如上所示,上面第一個(gè)return返回的就是一個(gè)閉包,那么本質(zhì)上說(shuō)閉包就是一個(gè)函數(shù)。那么返回這個(gè)函數(shù)有什么用呢?

那是因?yàn)檫@個(gè)函數(shù)可以調(diào)用到它外部的a這個(gè)變量。其實(shí)也就是說(shuō),return返回的是這個(gè)函數(shù) + a這個(gè)變量

那么,我們現(xiàn)在再來(lái)利用這個(gè)閉包做點(diǎn)事情

我們不妨創(chuàng)建一個(gè)變量 var f = fn(); 我們?nèi)绻?nbsp;console.log(f) 一下就知道,這個(gè)f就是return的整個(gè)函數(shù)體,也就是  function() { return ++a;} 

那么我們執(zhí)行f()就相當(dāng)于執(zhí)行function函數(shù)了,這時(shí),我們多次執(zhí)行f()的話,返回的a數(shù)值就會(huì)一直疊加。

但是如果我們現(xiàn)在再創(chuàng)建一個(gè)變量 

網(wǎng)友評(píng)論