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