循环时,增加变量对settimeout函数没有影响

时间:2014-08-29 15:49:35

标签: javascript function while-loop settimeout

我花了很多时间来解决这个问题,最后我可以在jsfiddle的一个易于阅读的代码中展示它:http://jsfiddle.net/Lb0g25ae/

function test(i) {
    return function() {
        console.log(i);
        //I need to increase valid here because this is where the script will choose wheter to increase or not (continue looping) valid depending on some conditions
    }
}

var valid = 0;
while (valid < 5) {
    setTimeout(test(valid), 1000*valid);
    valid++;
}

我需要它

function test(i) {
    return function() {
        console.log(i);
        valid++;
    }
}

var valid = 0;
while (valid < 5) {
    setTimeout(test(valid), 1000*valid);
}

但这样循环不会停止,因为有效不会增加,这将产生无限循环和崩溃。有人可以指出我正确的方向吗?

3 个答案:

答案 0 :(得分:3)

有效不会增加,因为循环不停,并立即重载cpu。

您需要在超时后调用test。检查:

var valid = 0;
function test() {
    console.log(valid);
    valid++;
    if(valid < 5){
        setTimeout(test, 1000*valid);
    }
}
test();

答案 1 :(得分:0)

有效变量必须是全局的,所以试试这个

var valid = 0;
function test(i) {
    return function() {
        console.log(i);
        window.valid++;
    }
}


while (valid < 5) {
    setTimeout(test(valid), 1000*valid);
}

答案 2 :(得分:0)

这里的问题是while循环必须在任何超时运行之前运行完成。也就是说,valid在第二个过去之前不会递增,并且没有其他代码在运行,但是这种情况永远不会发生,因为while循环仍然会运行...

您需要在测试功能中安排以下超时。