同步和異步的區別是什么?
js是單線程的,只能同時做一件事,所以就需要異步
同步會阻塞代碼執行,而異步不會
alert是同步,setTimeout是異步
// 異步
console.log(100);
setTimeout(function () {console.log(200);
}, 1000);
console.log(300);
// 同步
console.log(100);
alert(200); // 1秒之后點擊確認
console.log(300);
何時需要異步?
在可能發生等待的情況,等待過程中不能像alert一樣阻塞程序進行。因此,所有“等待的情況”都需要異步。
前端使用異步的場景有哪些?
定時任務:setTimeOut,setInterval
網絡請求:ajax請求,動態 <img> 加載
事件綁定
// ajax請求
console.log('start');
$.get('./data1.json', function (data) {console.log(data);
});
console.log('end');
// <img> 加載
console.log('start');
var img = document.createElement('img');
img.onload = function () {console.log('loaded');
};
img.src = '/xxx.png';
console.log('end');
// 事件綁定
console.log('start');
document.getElementById('btn1').addEventListener('click', function () {alert('clicked');
});
console.log('end');