1.首先我們來說一下什麼是異步
舉例:
console.log(1);
setTimeout(function(){
console.log(2);
},1000)
console.log(3);
你會發現,程序不是按部就班的先輸出1,再輸出2,最後輸出3,而是先1再3最後2,這就是異步,程序各執行各的不會出現阻塞;對比同步應該更好理解
舉例:
console.log(1);
alert(2);
console.log(3);
從這個例子可以看出只有在點擊了彈出框的alert確認之後纔會執行輸出3,會出現程序阻塞。這也是同步和異步的區別,異步不會導致程序的阻塞,同步會導致程序的阻塞。
2、說一下我們什麼時候需要異步,也就是我們程序什麼時候不能阻塞。
在可能發生等待的情況下,就像上邊提到的等待過程中,不能像alert一樣阻塞其他程序的運行。
這就引出了什麼情況下會發生等待呢?列出以下幾點
a.定時任務,setTimeout,setInterval;
b.網絡請求,ajax請求、動態img加載;
c.事件綁定。
3、我們來說一下什麼是單線程
相信接觸js的小夥伴都知道js是單線程的,所以需要異步,但是什麼是單線程,有很多新入行的小夥伴可能不太清楚,還是先上例子
console.log(1);
setTimeout(function(){
console.log(2)
});
console.log(3)
這裏我們的執行順序依然是1,3,2,即使定時是沒有時間的因爲他是異步所以會被先放到一遍,當其他函數執行完畢後,js會查看有沒有異步的函數沒有執行,然後依次執行,大家可以看出來,單線程就是隻能一次幹一件事情,不能同時幹多件事情,只能一個一個來,就是將程序串起來,但是因爲程序不能阻塞所以會先將異步放一邊,當程序執行完畢後,再來查看異步是否能馬上執行,或者延時執行,再依次執行。