js垃圾回收和內(nèi)存泄露、js異步之宏任務(wù)和微任務(wù)

2021-9-18    前端達(dá)人

js垃圾回收

標(biāo)記清除 

       當(dāng)變量進(jìn)入環(huán)境時(shí),在函數(shù)中聲明一個(gè)變量,就將這個(gè)變量標(biāo)記為“進(jìn)入環(huán)境”。從邏輯上講,永遠(yuǎn)不能釋放進(jìn)入環(huán)境的變量所占用的內(nèi)存,因?yàn)橹灰獔?zhí)行流進(jìn)入相應(yīng)的環(huán)境,就可能會(huì)用到它們。而當(dāng)變量離開(kāi)環(huán)境時(shí),則將其標(biāo)記為“離開(kāi)環(huán)境”

引用計(jì)數(shù) 

        就是跟蹤記錄每個(gè)值被引用的次數(shù)。當(dāng)聲明了一個(gè)變量并將一個(gè)引用值賦給該變量時(shí),則這個(gè)值的引用次數(shù)為1。如果同一個(gè)值又被賦值給另一個(gè)變量,則該值的引用次數(shù)加1。相反,如果這個(gè)值引用的變量又取得了另外一個(gè)值,則這個(gè)值的引用次數(shù)減 1。當(dāng)這個(gè)值的引用次數(shù)變成 0 時(shí),則說(shuō)明沒(méi)有辦法再訪問(wèn)這個(gè)值了,因此就可以將其占用的內(nèi)存空間回收、當(dāng)下次再運(yùn)行時(shí),它就會(huì)釋放引用次數(shù)為 0 的值所占用的內(nèi)存

內(nèi)存泄漏:

        不用的內(nèi)存,沒(méi)有及時(shí)釋放,就叫做內(nèi)存泄漏

js中的內(nèi)存泄漏:

1. 循環(huán)引用

        一個(gè)DOM對(duì)象被一個(gè)Javascript對(duì)象引用,同時(shí)又引用其它的Javascript對(duì)象,這個(gè)DOM對(duì)象可能會(huì)引發(fā)內(nèi)存泄露。這個(gè)DOM對(duì)象的引用不會(huì)在腳本停止的時(shí)候被垃圾回收。要想破壞循環(huán)引用,就將引用DOM元素的對(duì)象賦值為null

2. 閉包

        在閉包中引入閉包外部的變量時(shí),當(dāng)閉包結(jié)束時(shí)此對(duì)象無(wú)法被垃圾回收

3. DOM泄露

        當(dāng)原有dom被移除時(shí),子節(jié)點(diǎn)引用沒(méi)有被移除則無(wú)法回收

4. Timers 計(jì)(定)時(shí)器泄露

js異步之宏任務(wù)(marcroTask)和微任務(wù)(microTask)

        宏任務(wù)包括:setTimeout、 setInterval、 Ajax 和 DOM事件
        微任務(wù):Promise、 async/await
        微任務(wù)宏任務(wù)的執(zhí)行時(shí)間要

異步和單線程

        異步單線程相輔相成的,js是一門(mén)單線程腳本語(yǔ)言,所以需要異步來(lái)輔助

事件循環(huán)

        同步進(jìn)入主線程異步進(jìn)入任務(wù)隊(duì)列,主線程內(nèi)的任務(wù)執(zhí)行完畢為空,就去任務(wù)隊(duì)列讀取對(duì)應(yīng)的函數(shù),進(jìn)入主線程執(zhí)行

執(zhí)行順序:
        一:先執(zhí)行所有的同步任務(wù)(log)
        二:執(zhí)行完畢再去執(zhí)行第一個(gè)宏任務(wù)
        三:執(zhí)行第一個(gè)宏任務(wù)時(shí),先看有沒(méi)有需要執(zhí)行的‘微任務(wù),如果有就執(zhí)行,沒(méi)有就執(zhí)行‘宏任務(wù)’        








藍(lán)藍(lán)設(shè)計(jì)建立了UI設(shè)計(jì)分享群,每天會(huì)分享國(guó)內(nèi)外的一些優(yōu)秀設(shè)計(jì),如果有興趣的話,可以進(jìn)入一起成長(zhǎng)學(xué)習(xí),請(qǐng)掃碼藍(lán)小助,報(bào)下信息,藍(lán)小助會(huì)請(qǐng)您入群。歡迎您加入噢~~希望得到建議咨詢(xún)、商務(wù)合作,也請(qǐng)與我們聯(lián)系。

分享此文一切功德,皆悉回向給文章原作者及眾讀者.

轉(zhuǎn)自:csdn
免責(zé)聲明:藍(lán)藍(lán)設(shè)計(jì)尊重原作者,文章的版權(quán)歸原作者。如涉及版權(quán)問(wèn)題,請(qǐng)及時(shí)與我們?nèi)〉寐?lián)系,我們立即更正或刪除。

藍(lán)藍(lán)設(shè)計(jì)m.yvirxh.cn )是一家專(zhuān)注而深入的界面設(shè)計(jì)公司,為期望卓越的國(guó)內(nèi)外企業(yè)提供卓越的UI界面設(shè)計(jì)、BS界面設(shè)計(jì) 、 cs界面設(shè)計(jì) 、 ipad界面設(shè)計(jì) 、 包裝設(shè)計(jì) 、 圖標(biāo)定制 、 用戶(hù)體驗(yàn) 、交互設(shè)計(jì)、 網(wǎng)站建設(shè) 、平面設(shè)計(jì)服務(wù)


日歷

鏈接

個(gè)人資料

存檔