概念:閉包 的英文解釋是有“block”的概念,所以劣像,閉包就是一個(gè)封閉的函數(shù),這個(gè)函數(shù)的特殊之處在于橄仆,是外部函數(shù)返回的剩膘,并且持有外部函數(shù)變量的函數(shù)。通常內(nèi)部return的函數(shù)是一個(gè)匿名函數(shù)盆顾。
在熟悉全局作用域和局部作用域的基礎(chǔ)上怠褐,我們來(lái)分析閉包的簡(jiǎn)單案例
在上面的案例當(dāng)中,fn2就是一個(gè)閉包函數(shù)您宪,fn2也是一個(gè)具名函數(shù)奈懒,當(dāng)調(diào)用fn1的時(shí)候奠涌,向外返回一個(gè)函數(shù),將函數(shù)賦值給全局變量result磷杏,在返回的函數(shù)中用到了局部變量i溜畅,而承接它的時(shí)全局變量result,為了保證全局變量正常訪問(wèn)极祸,返回函數(shù)中的局部變量并不會(huì)立即銷毀慈格,而是將周期延長(zhǎng),以達(dá)到調(diào)用全局變量正常執(zhí)行的結(jié)果遥金。
閉包的用處
1.用在for循環(huán)添加事件的bug中
當(dāng)通過(guò)for循環(huán)為多個(gè)同級(jí)對(duì)象綁定事件的時(shí)候浴捆,因?yàn)槭录or循環(huán)和事件綁定時(shí)異步的,事件在觸發(fā)的時(shí)候才能觸發(fā)相應(yīng)的函數(shù)執(zhí)行稿械,此時(shí)i變量的值永遠(yuǎn)是徐娜換最后一次得到的結(jié)果
1.一般解決辦法
定義對(duì)象的私有屬性保存每次循環(huán)的變量选泻。然后在函數(shù)中利用定的的變量。
2.閉包解決辦法
首先定義自調(diào)用的匿名函數(shù)美莫,將變量的值作為參數(shù)傳到定義的閉包函數(shù)(匿名函數(shù))中页眯,當(dāng)for循環(huán)開(kāi)啟之后,匿名函數(shù)會(huì)在代碼執(zhí)行到本行的時(shí)候執(zhí)行自調(diào)用茂嗓,為對(duì)象添加事件餐茵,并把每一次的變量值保存在自己開(kāi)辟的內(nèi)存空間中,達(dá)到保存每次變量值的目的述吸,當(dāng)觸發(fā)事件的時(shí)候忿族,就能觸發(fā)事件綁定的函數(shù)來(lái)執(zhí)行。