-->

为什么不clearInterval在此代码的工作?(Why isn't clearInter

2019-09-17 00:04发布

有这台使用的间隔的功能setInterval()但即使打完电话后clearInterval()我可以在该控制台中看到else条件仍在运行。 我怎样才能正确地清除间隔?

function increase(old, step, neu) {
    var i = 0;
    var delay2;

    function countUp() {
        if (i < 5) {
            old += step;
            // console.log("increase")
            $("#total-price-value").text(old + " dollors");
            $("#total-price-value").digits();
            i++;
            delay2 = setInterval(countUp, 80);
        } else {
            clearInterval(delay2);
            console.log(delay2);
        }

    }
    countUp();

}​

Answer 1:

看起来你有点困惑超时和间隔之间的差异。 超时火只有一次; 间隔触发多次。 如果您使用的时间间隔,你可能只需要设置一次(你每次都设置它)。 如果您使用的是超时,你可能想每次设置(比如你正在做的)。

为了解决这个问题,你要么要切换到超时(可能是最简单的,只是一个查找/替换),或只设置间隔一次。

例如,这里是一个可以如何使用setTimeout数到五:

var count = 0;
function timeoutFired() {
    count++;
    if(count < 5) {
        setTimeout(timeoutFired, 1000);
    }
}
setTimeout(timeoutFired, 1000);

使用超时,我们并不需要明确从计数停止; 根本就没有设置超时会阻止它再次运行。

这里是一个可以如何使用setInterval

var count = 0;
function intervalFired() {
    count++;
    if(count >= 5) {
        clearInterval(interval);
    }
}
var interval = setInterval(intervalFired, 1000);

如果你想一些代码运行定期使用间隔停止,则必须调用clearInterval 。 请注意,我们只调用setInterval一次,与setTimeout ,我们不希望它继续每一次。



Answer 2:

显然,你误会了setIntervalsetTimeoutsetInterval运行封闭的功能 n微秒,而setTimeout后执行一次n毫秒。

我想你想“嘀,直到5”,所以这里是一个示例 :

function increase(old, step, neu) {
    var i = 0;

    interval = setInterval(function() {
        if (i < 5) {

            //do something at this "tick"
            console.log(i);

            i++;
        } else {
            //else, stop
            clearInterval(interval);
        }
    },80);

}

increase();


文章来源: Why isn't clearInterval working in this code?