Javascript 開發筆記 - for 迴圈 setTimeout 機制

2021-07-13
作家
Will_Lin
關鍵字

一般我們在開發,想到要進行大量且重複的行為很自然地會習慣使用迴圈

如下:

for(var i = 1; i <= 5; i++) {

  setTimeout(function() { console.log(i) }, 1000 * i)

}

然後就得到間隔一秒印出五次 6 的結果。


在Javascript的事件機制內,迴圈會先被執行完,而延遲的部份會被送進佇列裡

為此我們必須修改程式碼,透過匿名函數的方式將變數 i 傳遞下去,以方便我們的程式可以正確地找到屬於它自己的區域變數

for (var i = 0; i <= 5;i++) 

    setTimeout(function (x) { console.log(x) ;}, 1000 * i, i); 
}

上述程式碼,我們透過傳遞變數x傳遞了我們當次迴圈正確的數值

於是我們佇列中的五個待執行event便會像封面圖片的流程圖那樣,間隔一秒來正確列印出我們需要的結果

1、2、3、4、5、6