1.js的執行是單線程的。
2.而當它遇到了window的setTimeout和setInterval這樣的異步任務,js都默默地先不執行這些回調,而是繼續向下執行其他js腳本,等到所有js腳本都解析執行完了,再執行回調。
3.那么有多個回調的時候執行順序是怎么樣的呢?
瀏覽器是多線程的,js執行線程只是它多個線程中的一個。
當js的執行線程看到了setTimeout,瀏覽器馬上會調用其他線程把這個函數中的回調扔到瀏覽器的事件隊列中,事件隊列是先入先出的隊列。
那么在js執行線程執行完所有腳本空閑的時候,事件隊列中的事件回調,會一個一個被拿出來執行。
瀏覽器有一個內部大消息循環Event Loop(事件循環),會輪詢事件隊列並處理事件。