先了解如下這戲概念性的東西多線程
一、
單線程 :一個任務執行後再執行另外一個任務
多線程 :同時處理多個任務
二、
同步任務(阻塞) :在主線程上排隊執行的任務,只有前一個任務執行完畢,才能執行後一個任務;
異步任務(非阻塞):不進入主線程、而進入"任務隊列"的任務,只有"任務隊列"通知主線程,某個異步任務能夠執行了,該任務纔會進入主線程執行。
js爲何選擇單線程?
若是兩個線程同時操做同一個dom確定會發生衝突,而單線程完美的避免了這個問題。打個比方:一家公司有兩個老闆,a老闆讓員工往東,而b老闆讓員工往西,這時員工不知道該聽哪一個老闆的,淨剩下兩個老闆吵架了。而單線程就像是一個公司只有一個老闆,他讓往東就往東,往西就往西,不會有衝突
爲何要異步?
若是單線程同步的話,像三十秒後關閉廣告這種操做,這三十秒期間沒法進行任何操做,由於線程一直在等待他的執行結果,等它執行完了才能繼續下面的操做
js事件循環就是以上問題的解決方案
一、全部同步任務都在主線程上執行,造成一個執行棧。
二、主線程以外,還存在一個"任務隊列"。只要異步任務有了運行結果,就在"任務隊列"之中放置一個任務。
三、一旦"執行棧"中的全部同步任務執行完畢,系統會從任務列隊中,將有結果的任務放入主線程執行
四、主線程不斷重複上面的第三步。
白話總結:
先把電飯鍋插上就無論了,等個人菜炒完了再回來看看大米飯熟沒熟