我有一个像这样的for循环:
for (var i = 0, ii = 10; i < ii; i++) {
var timer = setTimeout(function(i,timer) {
return function() {
clearTimeout(timer);
if (condition) ii++;
}
}(i,timer), 1000);
}
我要做的是增加for循环中延迟闭包内执行for循环的次数。
问题是,当执行10个定时器函数之一时,循环已经完成。 (我认为这是问题)
我想知道如何在ii
函数中改变timeout
,而不必再次调用整个for循环。 (这个过程必须保持一个循环)
答案 0 :(得分:0)
你将无法完全按照你想要的那样做,因为传递给setTimeout
的任何函数在当前函数完成之前都不会执行。例如,如果您尝试:
setTimeout(function() {
console.log('Hello!');
}, 100);
while (true) { }
你永远不会看到'Hello!'
,因为当前的功能永远不会完成。相反,您可以考虑创建一个函数,使其根据您的ii
变量执行某些操作。
function doStuff(ii) {
// Do some stuff given ii
if (condition) {
setTimeout(function() {
doStuff(ii + 1);
}, 1000);
}
}
for (var i = 0; i < 10; i++) {
doStuff(i);
}