js
爲何是單線程的?單線程的js
是怎麼實現異步的?問題一:多線程的js
操做同一個DOM,會形成瀏覽器的執行衝突(好比:一個刪除,一個修改)。
問題二:經過事件循環機制(EventLoop)實現異步;git
EventLoop
JS是單線程的,主線程擁有一個執行棧和執行隊列。主線程自上而下依次執行代碼,並判斷函數是同步的仍是異步的,同步的函數直接在主線程中執行,異步函數塞入執行隊列。當主線程的函數執行完畢後,再將異步函數從執行隊列中出棧,直到執行完畢。
macrotasks:github
microtasks:瀏覽器
==microtask的執行優先級高於macrotask==多線程
瀏覽器和Node的執行順序不同,上述規則適用於瀏覽器異步