清除后启动setInterval(无限循环)

时间:2016-09-03 20:45:45

标签: javascript loops setinterval

我试图创建一个无限循环,使得变量从0增加到最大30,而min 3在每个增量之间花费一秒钟。但不是这样,它根本不会增加,而是反复开始记录检查,变量x和随机变量永远不会被重新定义。

var random = Math.floor(Math.random() * 27) + 3;
var x = 0;

setInterval(count, 1000)

function count() {
    if (x < random) {
        x++document.getElementById("secs").innerHTML = x + "s ago";

        console.log(x);
        console.log(random);

    } else {
        var random = Math.floor(Math.random() * 27) + 3;
        var x = 0;
        console.log("check")

    }
};

4 个答案:

答案 0 :(得分:0)

console.log(x);之前添加日志语句if-statement只是为了查看x的值是什么......值是否会发生变化?您需要在此处更改x的值 - 例如x +=1; 您需要更改count方法以某种方式增加X的值 - 请参阅下面的示例:

function count() {
if (x < random) {
    document.getElementById("secs").innerHTML = x + "s ago";
    //here you increment X
    x += 1;   
    console.log(x);
    console.log(random);
} else {
    //here you are setting new values (no need for var - otherwise you create new, local variables
    random = Math.floor(Math.random() * 27) + 3;
    x = 0;
    console.log("check");
}
};

我希望这会有所帮助。

答案 1 :(得分:0)

您的代码应该是......

var writeStream = gfs.createWriteStream({
  filename: f.location,
  mode: 'w',
  content_type: 'image/jpeg'
});

请记住,最好将setInterval分配给变量,以便清除它......

var random = Math.floor(Math.random() * 27) + 3;
var x = 0;

setInterval(function() { x++; count(x,random) }, 1000)

function count(x ,random) {
if (x < random) {

    document.getElementById("secs").innerHTML = x + "s ago";

    console.log(x);
    console.log(random);

} else {
    var random = Math.floor(Math.random() * 27) + 3;
    var x = 0;
    console.log("check")

}
};

答案 2 :(得分:0)

您创建了两个全局变量来保存x和random的值,但是您还在count函数中创建了两个局部变量。在javascript中有一个称为变量提升的东西,这意味着所有变量声明都被移动到范围函数的顶部。在你的情况下,这是你的计数函数在javascript运行时的样子:

function count() {
  var random, x;
  // At this point random and x are both undefined, so x < random will always be false

  if (x < random) {
    x++document.getElementById("secs").innerHTML = x + "s ago";

    console.log(x);
    console.log(random);

  } else {
    random = Math.floor(Math.random() * 27) + 3;
    x = 0;
    console.log("check")
  }
};

要解决您的问题,您需要摆脱计数功能中的var关键字

var random = Math.floor(Math.random() * 27) + 3;
var x = 0;

setInterval(count, 1000)

function count() {
  if (x < random) {
    x++;
    document.getElementById("secs").innerHTML = x + "s ago";

    console.log(x);
    console.log(random);
  } else {
    random = Math.floor(Math.random() * 27) + 3;
    x = 0;
    console.log("check")
  }
};

答案 3 :(得分:0)

您的代码有几个问题。一个是你在函数内部声明了变量,你已经在函数之外声明了变量(在else的{​​{1}}部分内),另一个是你调用if-else之后的变量方法你无法阻止它每秒钟被召唤到永恒。

您的目标是增加window.setInterval()的值,直到达到x的值,然后重新开始。 random方法更适合您的目的。请考虑以下内容......

window.setTimeout()

如果出于某种原因,您希望停止对/* generate variable values */ var random = Math.floor(Math.random() * 27) + 3; var x = 0; var timer; /* report the 'random' value */ console.log('random:',random); function count() { if (x < random) { /* report the 'seconds since' value */ console.log(x+1); /* increment the value */ ++x; /* call this function in 1000ms */ timer = setTimeout(count, 1000); } else { /* re-generate variable values */ random = Math.floor(Math.random() * 27) + 3; x = 0; /* report the new 'random' value */ console.log(" check"); console.log('random:',random); /* call this function in 1000ms */ timer = setTimeout(count, 1000); } } /* begin 1s from now */ timer = setTimeout(count, 1000); 的下一次调用,则可以将count()变量传递给timer方法,就像这样。

window.clearTimeout()

另请参阅:WindowTimers @ MDNthis classic StackOverflow answer有关JavaScript变量范围。