我花了很多时间来解决这个问题,最后我可以在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);
}
但这样循环不会停止,因为有效不会增加,这将产生无限循环和崩溃。有人可以指出我正确的方向吗?
答案 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循环仍然会运行...
您需要在测试功能中安排以下超时。