javascript - While 循环,增加变量在 settimeout 函数内部没有影响

标签 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);
}

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

最佳答案

Valid 不会增加,因为 while 循环会不停地进行并立即使 cpu 过载。

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

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

关于javascript - While 循环,增加变量在 settimeout 函数内部没有影响,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25571805/

相关文章:

java - 简单的 while 循环不起作用

javascript - 以编程方式设置输入值将包含 "\"

javascript - 这段代码中嵌套 Promise 的目的是什么?

arrays - 获取数组的所有组合

c - 使用数组作为函数参数

function - Function.const 的目的是什么?

C++ getline inside while loop 缺少第一个字母。没有 cin.ignore 不工作?

python - 如何在骰子游戏中的正确位置结束 try 循环?

javascript - .js 文件出现 ESLint 错误

javascript - 从 Jquery 中的 Div 类名获取 Id