js代碼的運行機制


html 中js 加載機制

1. 一般情況下,如果遇到js, 會堵塞html渲染,等到js 加載完畢並且執行完畢才會繼續渲染html,如果不要這種效果,script 提供了defer 和anysc兩種方式

  defer:   js下載和渲染html 同時執行,html渲染完成后,才執行js代碼

  async:  js下載和渲染html同時執行,js下載完成后,立即執行js代碼,執行js代碼過程會堵塞html的渲染

  

js代碼運行分兩個階段

1.預編譯階段,

  在這個階段進行變量的提升,將變量賦值為undefined;函數的聲明提升

2. js執行階段

  js 分為同步任務和異步任務,先執行同步任務,在執行異步任務

  異步任務又分為宏任務和微任務,先執行微任務在執行宏任務

  宏任務:setTimeout()  ajax回調 事件回調(鼠標鍵盤事件)

  微任務:promise await    process.nextTick(node中的)

  流程圖:

 

js中的內存泄露和垃圾回收

1.內存泄露: 不再用到的內存,沒有及時釋放,就會導致內存泄露 。

2. 導致內存泄露的幾種情況:

  1)意外的全局變量  在函數中定義全局變量

  2)被遺忘的計時器

  3)濫用閉包,閉包中內部函數持有外部函數的變量,導致在閉包外可以引用閉包里面的變量

  4)脫離 DOM 的引用   dom元素綁定了事件,在元素刪除后,事件還存在,導致的內存泄露

3.垃圾回收

  1)最常用的是標記清除的方式,其次還有引用計數的方式

  2)標記清除:從根節點遍歷,將可用的可達的做個標記,清除一些沒有標記的空間,被回收

  

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM