一、javascript中為什麼需要引入非同步?
1.我們知道js是單執行緒語言,只能同時做一件事。但在遇到需要等待(網路請求,定時任務)不能卡住,所以引入了非同步
2.非同步就是為了解決單執行緒需要等待的問題(如:網路請求,定時任務)
3.非同步是基於回撥 callback 函式形式
二、同步和非同步
1.非同步:不會阻塞程式碼執行,
//非同步 console.log(100) setTimeout(()=>{ // 回撥函式 console.log(200) },1000) console.log(300)
程式碼依次輸出: 100 、300 、200
2.同步:會阻塞程式碼執行,上一行程式碼沒執行完不會往下執行
//同步 console.log(100) alert(200) console.log(300)
alert 彈窗不關閉,下一行程式碼不會執行
三、非同步應用場景
1.網路請求,如:ajax、圖片載入
//ajax console.log('start') $.get('./data1.json',function(data1){ console.log(data1) }) console.log('end')
//圖片載入 console.log('start') let img = document.createElement('img') img.onload = function(){ console.log('loaded') } img.src = '/xxx.png' console.log('end')
2. 定時任務,如setTimeout、setInterval
//setTimout console.log(100) setTimeout(function(){ console.log(200) },1000) console.log(300)
//setInterval console.log(100) setInterval(function(){ console.log(200) },1000) console.log(300)