Javascript setInterval函数未停止

Javascript setInterval函数未停止,javascript,Javascript,我正在尝试每1000毫秒向集合添加一个对象,当添加了4个对象时,我想清除间隔并停止函数,但我遇到了问题,并且setInterval函数没有停止,因为if检查不在正在更新的代码中。如果lvl1count==4,则仅在调用Level1时进行检查。将支票移动到您的间隔内,它就会起作用。您还需要更改变量名,以便它们不会冲突 Level1(); var lvl1count = 0; function Level1() { var x = setInterval(function () {

我正在尝试每1000毫秒向集合添加一个对象,当添加了4个对象时,我想清除间隔并停止函数,但我遇到了问题,并且setInterval函数没有停止,因为if检查不在正在更新的代码中。如果lvl1count==4,则仅在调用Level1时进行检查。将支票移动到您的间隔内,它就会起作用。您还需要更改变量名,以便它们不会冲突

Level1();
var lvl1count = 0;
function Level1() {

    var x = setInterval(function () {
        lvl1count++;
        var x = 84 + (Math.random() * (cw - 27));
        var y = 84 + (Math.random() * (ch - 27));
        Enemies.add(new Enemy(x, y, 1, 90));
    }, 1000);
    if (lvl1count == 4) {
        console.log("finish");
        clearInterval(x);return;
    }
}
调用Level1函数时,最新的if语句只执行一次。因此,每次调用setInterval内的函数时,都需要检查lvl1count变量的计数器:

注意:@epascarello指出,这需要更改变量名。由于您已经在anonimous函数中使用了x,请使用另一个变量更改setInterval赋值,例如

var x = setInterval(function () {
    lvl1count++;
    var x = 84 + (Math.random() * (cw - 27));
    var y = 84 + (Math.random() * (ch - 27));
    Enemies.add(new Enemy(x, y, 1, 90));

    if (lvl1count == 4) {
      console.log("finish");
      clearInterval(x);
      return;
    }
}, 1000);


在您的情况下,您可以使用setTimeout代替setInterval,如下所示

clearInterval(anotherVariable);

反对票的选民愿意解释他的反对票吗?因此,如果有必要,我可以改进我的答案。不是downvoter,但您的代码仍然不会清除间隔。@epascarello那么,为什么该代码在到达4时停止?因为示例中的代码!==上面答案中的代码!这就是为什么它有效的原因。@FabrizioCalderan所以你仍然没有看到你的问题?如果你读了我被否决的答案,你就会知道错误是什么。洛拉:太棒了,谢谢你对正确答案的否决票+1.对于这个答案A-1,没有解释变量冲突是不公平的。或许,一个简单的评论指出问题对OP也会更有帮助,而不是投反对票
var anotherVariable = setInterval(function () {
clearInterval(anotherVariable);
Level1();
var lvl1count = 0;
function Level1() {

    setTimeout(function () {
        lvl1count++;
        //stuff
        if(lvl1count++ <= 5) {
            Level1();
        }
    }, 1000);
}