Javascript語言有自己的一套內(nèi)存回收機(jī)制,一般情況下局部變量和對(duì)象使用完就會(huì)被系統(tǒng)自動(dòng)回收,無需我們理會(huì)。但是碰到閉包的情況這些變量和對(duì)象是不會(huì)被回收的,對(duì)于普通的web站點(diǎn),頁面刷新或跳轉(zhuǎn)這些內(nèi)存也會(huì)被回收。如果是單頁web站點(diǎn),頁面切換及數(shù)據(jù)請(qǐng)求都是通過ajax無刷新機(jī)制實(shí)現(xiàn)的,頁面資源無法自動(dòng)回收,時(shí)間長了會(huì)嚴(yán)重影響性能,造成內(nèi)存泄漏甚至頁面崩潰直接退出,這時(shí)候手動(dòng)釋放不用資源就非常必要了,包含刪除dom、釋放對(duì)象等
想手動(dòng)釋放含有閉包的對(duì)象時(shí),必須先將引用對(duì)象屬性的事件刪除,然后設(shè)置為null方可消耗對(duì)象。這種事件一般是可以多次執(zhí)行的,如原生事件的監(jiān)聽,定時(shí)器。一般比較有名較完善的插件都有帶銷毀資源方法,如iscroll插件,里面就有一個(gè)destroy原型方法,它里面也就是移除事件監(jiān)聽和刪除定時(shí)器。大家可以去看看源碼
什么是閉包?
私有作用域,把一些信息保存下來,對(duì)于保護(hù)這個(gè)功能來說,我之前在我項(xiàng)目中封裝過很多小的插件,但是這些插件,我怕別人用我的插件的時(shí)候,所以我會(huì)首先把所有的東西全部放在一個(gè)閉包當(dāng)中保護(hù)起來,這樣就防止了全局變量的污染,至于保存的話,之前在做項(xiàng)目的時(shí)候,循環(huán)事件綁定,都已經(jīng)變成全局下面的了,我就會(huì)用閉包機(jī)制形成一個(gè)不銷毀的作用域
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。