js非同步和單執行緒
非同步結果:100 300(不做等待) 200
同步結果:100 200(等待) 300 (會阻塞後面程式碼的執行)
對比alert();
console.log(100);
alert(200);
console.log(300);
結果:// 100 200 點選確認 300
5、什麼時候需要非同步?
a>可能發生等待的情況
b>不能像alert一樣阻塞程式執行
換言之,所有的“等待的情況”都需要非同步
6、前端使用非同步的場景:
a>定時任務
b>ajax
demo1:ajax請求
console.log('start');
$.get('XXX', function(data) {
console.log(data);
});
console.log(end);
執行結果: // start end object
分析:
ajax請求需要等待
過程:a》列印start
b》執行 $.get 後,函式 data1 會被暫存起來,不會立即執行(單執行緒的特點,不能同時幹兩件事)
c》執行最後一行,列印300
d》待所有程式執行完,處於空閒狀態時,會立馬看有沒有暫存起來的要執行
e》發現暫存起來的 $.get 中的 data1 未執行,待請求 data1.json返回 後,立即執行 data1
demo2:動態圖片的載入
console.log('start');
const img = document.getElementById(‘img’);
img.onLoad = function() {
console.log('loadImg');
};
console.log(end);
執行結果: // start loadImg end 不知道圖片何時完成載入,需要等待
demo3:事件繫結
console.log('start');
document.getElementById('box').on(click, function() {cosnole.log('click);});
console.log('end');
// start end (點選)click 不知道使用者何時點選,需要等待
7、非同步和單執行緒:
JS 是單執行緒的語言,所謂“單執行緒”就是一根筋,對於拿到的程式,一行一行的執行,直到上面的執行為完成,只能做這一件事