1、js是
(1)單執行緒
(2)任務佇列:同步任務;非同步任務——先掛載
單執行緒就意味著所有任務需要排隊,前乙個任務結束,才會執行下乙個任務。
js從上到下執行,遇到非同步任務先掛起,繼續執行同步任務,同步任務執行完畢再處理非同步任務。(優先執行同步任務,再執行非同步任務)
如:for(var i=0;i<4;i++),1000);
}輸出結果為:4 4 4 4
注:非同步任務的放入時間和執行時間。for迴圈先執行4次,大概用時1毫秒,此時非同步隊列為空。for迴圈在執行中並沒有將settimeout放入非同步佇列,只有時間到了才將settimeout的函式體扔進非同步佇列再執行。
event loop(事件迴圈):
注:理解哪些語句會放入非同步任務佇列?
理解語句放入非同步任務佇列的時機?
事件迴圈(js執行機制):
主線程讀取js**,此時為同步環境,形成相應的堆和執行棧;
主線程遇到非同步任務,只給對應的非同步程序進行處理;
非同步程序處理完畢(ajax返回,dom事件,timer時間到等),將相應的非同步任務推入任務佇列;
主線程執行完畢,查詢任務佇列,如果存在任務,則取出乙個任務推入主線程處理(先進先出);
重複執行2、3、4,成為事件迴圈。
非同步任務:
JS執行機制
js是單執行緒的,settimeout和setinterval是非同步任務,要掛起,不先執行,等同步任務完成之後,再去處理非同步任務 console.log 1 settimeout function 0 console.log 3 console.log 4 輸出 1 3 4 2console.l...
JS執行機制
輸出結果為 1,2,3 js是從上到下執行的 js是單執行緒的,即在同一時間只能做一件事情 遇到同步程式,直接執行 遇到非同步程式,先掛起,等同步程式執行完畢後再執行 同步佇列 優先順序最高 非同步佇列 遇到非同步佇列先掛起,等同步佇列執行完後,再選擇執行非同步佇列的某個 settimeout中的時...
JS執行機制
js單執行緒 在同一時間js只能做一件事。為什麼是單執行緒?如果多執行緒,同時操作乙個dom會出問題。非阻塞 event loop 事件迴圈 任務佇列 同步任務佇列要優先於非同步任務佇列處理。非同步任務被分為巨集任務和微任務。常見的非同步任務分類如下 巨集任務 定時器系列,dom事件 ui互動事件 ...