異步和單線程

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會查看有沒有異步的函數沒有執行,然後依次執行,大家可以看出來,單線程就是隻能一次幹一件事情,不能同時幹多件事情,只能一個一個來,就是將程序串起來,但是因爲程序不能阻塞所以會先將異步放一邊,當程序執行完畢後,再來查看異步是否能馬上執行,或者延時執行,再依次執行。


發佈了17 篇原創文章 · 獲贊 13 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章