請看這四個setTimeout函數及其執行部分
P粉304704653
P粉304704653 2023-09-17 18:04:25
0
1
540

//1
setTimeout(() => {
  console.log('hi');
}, 5000)

//2
setTimeout(() => {
  console.log('hello');
}, 3000)

//3
setTimeout(() => {
  console.log('bye');
}, 0)

//4
setTimeout(() => {
  console.time('the code took:');
  let i = 10000
  while (i--) {
    console.log(i);
  }
  console.timeEnd('the code took:')
}, 7000)

這裡我寫了四個setTimeout函數,根據我的了解,它們會在回呼佇列中同時開始執行,對嗎?如果我是對的,那麼我的疑問是,第四個setTimeout()函數在回調佇列中是否已經完成了一半或超過一半的執行,還是在推入呼叫堆疊後的7秒鐘後,它從頭開始執行?所以後台發生了什麼事?

P粉304704653
P粉304704653

全部回覆(1)
P粉709307865

這些函數在回呼佇列中不會並行或同時運行。它們是單獨和非同步地調度的。執行順序取決於每個函數的指定延遲。對於每個setTimeout函數,都會安排一個回呼在指定的延遲之後執行。

執行順序如下:

#
第三个setTimeout(0毫秒延迟)
第二个setTimeout(3000毫秒延迟)
第一个setTimeout(5000毫秒延迟)
第四个setTimeout(7000毫秒延迟)

然而,第四個setTimeout函數不一定與其他setTimeout函數一起執行,也無法保證其自身的執行時間。 執行順序由回調佇列決定,事件循環從回調佇列中取得任務,並且僅當呼叫堆疊為空時才在呼叫堆疊中執行它們。因此,只有在呼叫堆疊中沒有其他任務時,第四個setTimeout函數才會開始執行。運行給定程式碼後,輸出應按照以下順序顯示:

以下是輸出的序列:

1. bye
2. hello
3. hi
4. 从10000打印到0(降序)
5. 代码执行时间为...毫秒
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!