同步——一件事做完之後才能幹下一件事,效率低;
非同步——同時開始幹多件事;
js是單執行緒執行的,即同步執行,因為前端面對的問題是與使用者的互動,若是同時獲取事件,比如若是對獲取到的同一節點需要作不同操作,會亂套,因此js是單執行緒的。但是,如果一直都是同步執行,等一件事做完再去做另一件事,無疑非常耗時,使用者體驗會很差,因此,又需要js去非同步執行某些操作。
js中常見非同步程式設計方式有:
1、**函式——解決非同步程式設計最基本的方法
2、發布訂閱、通知
3、事件監聽
4、es 6: promise
5、es 7: * async和await
經典面試題:
for(var i=0;i<5;i++)for(var j=0;j<5;j++),1000)
}for(var j=0;j<5;j++),1000)
}
會出現上述結果的原因在於for是同步事件,settimeout是非同步事件,同步事件先執行,非同步事件則被放入佇列裡等待執行。等for執行完,j已經變成了5。
//解決方案1,閉包,實時儲存乙個j給settimeout
for(var j=0;j<5;j++),1000)
})(j);
}//解決方案2,let
for(let j=0;j<5;j++),1000)
}
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互動事件 ...