js垃圾回收
標(biāo)記清除
當(dāng)變量進入環(huán)境時,在函數(shù)中聲明一個變量,就將這個變量標(biāo)記為“進入環(huán)境”。從邏輯上講,永遠不能釋放進入環(huán)境的變量所占用的內(nèi)存,因為只要執(zhí)行流進入相應(yīng)的環(huán)境,就可能會用到它們。而當(dāng)變量離開環(huán)境時,則將其標(biāo)記為“離開環(huán)境”
引用計數(shù)
就是跟蹤記錄每個值被引用的次數(shù)。當(dāng)聲明了一個變量并將一個引用值賦給該變量時,則這個值的引用次數(shù)為1。如果同一個值又被賦值給另一個變量,則該值的引用次數(shù)加1。相反,如果這個值引用的變量又取得了另外一個值,則這個值的引用次數(shù)減 1。當(dāng)這個值的引用次數(shù)變成 0 時,則說明沒有辦法再訪問這個值了,因此就可以將其占用的內(nèi)存空間回收、當(dāng)下次再運行時,它就會釋放引用次數(shù)為 0 的值所占用的內(nèi)存
內(nèi)存泄漏:
不用的內(nèi)存,沒有及時釋放,就叫做內(nèi)存泄漏
js中的內(nèi)存泄漏:
1. 循環(huán)引用
一個DOM對象被一個Javascript對象引用,同時又引用其它的Javascript對象,這個DOM對象可能會引發(fā)內(nèi)存泄露。這個DOM對象的引用將不會在腳本停止的時候被垃圾回收。要想破壞循環(huán)引用,就將引用DOM元素的對象賦值為null
2. 閉包
在閉包中引入閉包外部的變量時,當(dāng)閉包結(jié)束時此對象無法被垃圾回收
3. DOM泄露
當(dāng)原有的dom被移除時,子節(jié)點引用沒有被移除則無法回收
4. Timers 計(定)時器泄露
js異步之宏任務(wù)(marcroTask)和微任務(wù)(microTask)
宏任務(wù)包括:setTimeout、 setInterval、 Ajax 和 DOM事件
微任務(wù):Promise、 async/await
微任務(wù)比宏任務(wù)的執(zhí)行時間要早
異步和單線程
異步和單線程是相輔相成的,js是一門單線程腳本語言,所以需要異步來輔助
事件循環(huán)
同步進入主線程,異步進入任務(wù)隊列,主線程內(nèi)的任務(wù)執(zhí)行完畢為空,就去任務(wù)隊列讀取對應(yīng)的函數(shù),進入主線程執(zhí)行
執(zhí)行順序:
一:先執(zhí)行所有的同步任務(wù)(log)
二:執(zhí)行完畢再去執(zhí)行第一個宏任務(wù)
三:執(zhí)行第一個宏任務(wù)時,先看有沒有需要執(zhí)行的‘微任務(wù),如果有就執(zhí)行,沒有就執(zhí)行‘宏任務(wù)’
藍藍設(shè)計建立了UI設(shè)計分享群,每天會分享國內(nèi)外的一些優(yōu)秀設(shè)計,如果有興趣的話,可以進入一起成長學(xué)習(xí),請掃碼藍小助,報下信息,藍小助會請您入群。歡迎您加入噢~~希望得到建議咨詢、商務(wù)合作,也請與我們聯(lián)系。
分享此文一切功德,皆悉回向給文章原作者及眾讀者.
轉(zhuǎn)自:csdn
免責(zé)聲明:藍藍設(shè)計尊重原作者,文章的版權(quán)歸原作者。如涉及版權(quán)問題,請及時與我們?nèi)〉寐?lián)系,我們立即更正或刪除。
藍藍設(shè)計( www.yvirxh.cn )是一家專注而深入的界面設(shè)計公司,為期望卓越的國內(nèi)外企業(yè)提供卓越的UI界面設(shè)計、BS界面設(shè)計 、 cs界面設(shè)計 、 ipad界面設(shè)計 、 包裝設(shè)計 、 圖標(biāo)定制 、 用戶體驗 、交互設(shè)計、 網(wǎng)站建設(shè) 、平面設(shè)計服務(wù)