2017-01-16 44 views
0

爲什麼這個函數只發送10次10​​次。我希望它發送1 ... 2 ... 3 ... 4 ... 5等 ,而是顯示爲 10 .... 10 .... 10 ... 10 ... I我不確定爲什麼會這樣。 如何創建一個返回不同值的循環?Javascript循環顯示相同的值10次

for (i = 0; i < locations.length; i++) { 

    setTimeout(function() { alert("test"+i.toString()) ; }, 100); 
                       } 

如何創建一個返回不同值的循環?

+0

通過超時生效的時間,我已經達到了最大值。 – Buffalo

回答

1

您可以通過使用閉包(將i傳回即時調用的函數表達式(IIFE))來完成此操作。這將保持i值:

for (var i = 0; i < 10; i++) { 
 
    (function(i) { 
 
    setTimeout(function() { 
 
     console.log("test" + i); 
 
    }, 100); 
 
    })(i); 
 
}

要使用i以同樣的方式增加超時。確保與IIFE包住整個超時電話:

for (var i = 0; i < 10; i++) { 
 
    (function(i) { 
 
    setTimeout(function() { 
 
     console.log("test" + i); 
 
    }, i * 100); 
 
    })(i); 
 
}

+0

是的,這是有效的=)有無論如何我可以關閉我也增加設置的時間?例如,我* 100? –

+0

@PeterSMcIntyre,是的,通過將所有setTimeout代碼移動到IIFE中很容易。檢查更新的答案。 – KevBot

+0

非常感謝你,這是完美的! –