瀏覽器的垃圾回收機(jī)制:
【谷歌瀏覽器】:基于 “引用查找 ”來進(jìn)行垃圾回收。
1、開辟的堆內(nèi)存,瀏覽器自己默認(rèn)會在空閑的時候,查找所有內(nèi)存的引用,
把那些不被引用的內(nèi)存釋放掉。
2、開辟的棧內(nèi)存(上下文),一般在代碼執(zhí)行完都會釋放掉,如果遇到上
下文中的東西被外部占用,則不會被釋放。
【IE等低版本瀏覽器】:基于 “計數(shù)器機(jī)制”來進(jìn)行內(nèi)存管理。
1、創(chuàng)建的內(nèi)存別引用一次,則計數(shù)1,再被引用一次,則計數(shù)2......,移除引用
減去1,當(dāng)減為0的時候,瀏覽器會把內(nèi)存釋放掉。
真實項目中,某些情況導(dǎo)致計數(shù)規(guī)則會出現(xiàn)一些問題,造成很多內(nèi)存不能被
釋放掉,產(chǎn)生“內(nèi)存泄漏”,查找引用的方式如果出現(xiàn)相互引用,也會導(dǎo)致“內(nèi)存泄漏”
閉包:函數(shù)執(zhí)行會形成全新的私有上下文,這個上下文可能被釋放掉,也可能不被釋放掉,
不論是否被釋放,它的作用是:
1、保護(hù):劃分一個獨立的代碼執(zhí)行區(qū)域,在這個區(qū)域中有自己私有變量的存儲空間,
而用到的私有變量和其他區(qū)域中的變量不會有任何的沖突(防止全局變量污染)。
2、保存:如果上下文不被銷毀,那么存儲的私有變量的值也不會被銷毀,可以被
其下級上下文中調(diào)取使用。
我們把函數(shù)執(zhí)行,形成的私有上下文,來保存和保護(hù)私有變量的機(jī)制,稱之為“閉包”
=> 閉包是一種機(jī)制

閉包.png