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