闭包中的JavaScript For-Loop alter loop语句

时间:2014-07-14 19:18:57

标签: javascript loops for-loop closures settimeout

我有一个像这样的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循环。 (这个过程必须保持一个循环)

1 个答案:

答案 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);
}