1. 程式人生 > >單執行緒和非同步-定時器

單執行緒和非同步-定時器

Js作為瀏覽器的指令碼語言,其最根本的作用是實現使用者與瀏覽器的互動行為,操作DOM決定它是單執行緒。例如:當一個使用者要刪除一個A,同時又要向A中新增內容,瀏覽器該以哪個執行緒為準。

同步任務:只有前一個任務執行完成後,才可執行下一個任務,在主執行緒中

非同步任務:這個佇列的所有任務都是不進入主執行緒執行,而是被瀏覽提供的執行緒執行,當執行完畢後就會產生一個回撥函式,並且通知主執行緒,在主執行緒執行完當前所執行的任務後,就會調取最早通知自己的回撥函式,使其進入主執行緒中執行,比如ajax請求,再主執行緒中呈現的就是請求結果~

非同步:(1)所有的同步任務都會在主執行緒上執行,形成一個執行棧。(2)主執行緒之外還有一個“任務佇列”。只要非同步任務有了執行結果,就在“任務佇列”中放置一個事件(回撥函式Callback)。(3)一旦“執行棧”中的所有同步任務執行完畢,系統就會讀取“任務佇列”,看裡面事件。那些對應的非同步任務,於是結束等待狀態,開始執行。

注:任務佇列:一個事件佇列(訊息的佇列)。io裝置完成一項任務,就在“任務佇列”中新增一個事件,表示相關的非同步任務可以進入“執行棧”,主執行緒讀取“任務佇列”,就是讀取裡面的有哪些事件。//例如產生的事件(比如滑鼠點選、頁面滾動等等)。只要指定過回撥函式,這些事件發生時就會進入”任務佇列”,等待主執行緒讀取。

回撥函式callback),就是那些會被主執行緒掛起來的程式碼。非同步任務必須指定回撥函式,當主執行緒開始執行非同步任務,就是執行對應的回撥函式。

非同步在前端中的應用場景

 定時任務setTimeout 用於指定毫秒數過後呼叫函式或者計算函式表示式  clearTimeout

               setInterval 用於每隔指定毫秒數迴圈呼叫函式或表示式 直到

clearinterval清除

網路請求  ajax請求 動態載入img

事件繫結