天天看點

對于Js的運作機制了解

一、js的運作機制

  1. JavaScript是單線程,意味着任務要一個接着一個完成,但是,如果前一個任務執行時間很長,那麼後面的任務就得一直阻塞着,這樣使用者體驗十分差。
  2. JavaScript的任務分為兩種,在主線程上執行的任務"同步任務",被主線程挂載起來的任務"異步任務",後者一般是放在一個叫任務隊列的資料結構中。
  3. 異步執行運作機制,也就是js的運作機制:

    1) 所有同步任務都在主線程上執行,形成一個執行棧

    2) 主線程之外,還有一個“任務隊列”,隻要異步任務有了運作結果,就在“任務隊列”之中放置一個事件

    3) 一旦“執行棧”中的所有同步任務執行完畢了,系統就會讀取“任務隊列”,看看裡面有哪些事件。那些對應的異步任務,于是結束等待狀态,進入執行棧,開始執行

    4) 主線程不斷重複上面的三步

  4. 任務隊列就是一個事件隊列,一般隻有主線程所有任務都執行完畢了,才會執行任務隊列裡面的異步任務,一般是按照隊列的“先進先出”順序執行
  5. 定時器,屬于任務隊列中的異步任務,定時器主要由

    setTimeout()

    setInterval()

    兩個函數來完成,内部運作機制完全一樣,不同的隻是,前者一次性執行,而後者反複執行
  6. 運作過程:

    1) 執行一個宏任務,過程中如果遇到微任務,就将其放到微任務的事件隊列裡

    2) 目前宏任務執行完成後,會檢視微任務的事件隊列,并将裡面全部的微任務依次執行完

繼續閱讀