我试图循环尝试在javascript(jQuery)中循环遍历数组,并将每个键传递给单独的函数。
这种方法很好,除非我想在防洪功能调用之间考虑半秒延迟。当我这样做时,它会按预期停止运行,并且只将最后一个键传递给函数而不是当前函数?
请参阅我的简化示例:
$( document ).ready(function() {
var arr = ['1','2','3','4','5','6','7','8','9'];
var delay = 500;
for (var i = 0; i < arr.length; i++) {
key = arr[i];
delay = 500 + delay;
setTimeout(function(){
output( key );
}, delay );
}
});
function output( val ) {
$('#results').append( val );
}
预期
123456789
生产
999999999
我认为这是因为每个循环都覆盖了'key'值,所以当Timeout函数触发时,'key'总是设置为'9'。所以我试着不要覆盖'key',而是每次使用一个数组并设置一个新的'key',如下所示:
$( document ).ready(function() {
var arr = ['1','2','3','4','5','6','7','8','9'];
var delay = 0;
var key = [];
for (var i = 0; i < arr.length; i++) {
delay++;
key[delay] = arr[i];
setTimeout(function(){
output( key[delay] );
}, 500*delay );
}
});
function output( val ) {
$('#results').append( val );
}
这仍然会产生结果:
999999999
所以:
为什么每次'延迟'递增并且设置超时功能时'key [delay]'应该是不同的值时会发生这种情况?
我怎样才能达到我想要的结果,每次触发Timeout功能时键都不同?