非同步和單執行緒
一、什麼是非同步
1、非同步
console.log(100);
setTimeout(function(){
console.log(200);
},1000);
console.log(300);
//輸出:100 300 200(等待1s)
非同步和同步的區別在於有無阻塞(非同步:先列印100,300,然後停頓1s列印200,不會出現阻塞 ;同步:先列印100,出現1s阻塞列印200,然後列印300)
2、前端非同步應用場景:
在可能發生等待的情況,等待過程中不能像alert一樣阻塞程式執行,即等待的情況下都需要非同步。
定時任務:setTimeout、setInverval
網路請求:ajax請求、動態<img>
事件繫結
二、 單執行緒
一次只能幹一件事,只能一個一個按順序完成,不能一次執行多個函式,
單執行緒和非同步的關係:
console.log(100);
setTimeout(function(){
console.log(200);
});
console.log(300);
//輸出:100 300 200
執行第一行列印100;執行setTimeout後,傳入的函式會被暫存起來不會立即執行(單執行緒不能同時幹兩件事);執行最後一行列印300;待所有程式執行完處於空閒狀態時會立馬檢視有沒有暫存起來的程式要執行,發現暫存起來的setTimeout中的函式無需等待時間,立即執行列印200