Javascript 为什么不是';clearInterval在这个代码中工作吗?

Javascript 为什么不是';clearInterval在这个代码中工作吗?,javascript,setinterval,Javascript,Setinterval,有一个函数可以使用setInterval()设置间隔,但即使调用clearInterval(),我仍然可以在控制台中看到else条件仍在运行。如何正确清除该间隔 function increase(old, step, neu) { var i = 0; var delay2; function countUp() { if (i < 5) { old += step; // console.log(

有一个函数可以使用
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();

}​
功能增加(旧、步进、neu){
var i=0;
var delay2;
函数倒计时(){
如果(i<5){
旧+=步进;
//控制台日志(“增加”)
$(“#总价”).text(旧+美元);
$(“#总价”).digits();
i++;
delay2=设置间隔(倒计时,80);
}否则{
清除间隔(延迟2);
console.log(delay2);
}
}
倒计时();
}​

看来您对超时和间隔之间的区别有点困惑。超时只触发一次;间隔射击多次。如果您使用的是间隔,您可能只想设置一次(每次都要设置)。如果您正在使用超时,您可能希望每次都设置它(就像您正在做的那样)

为了解决这个问题,您可以切换到超时(可能是最简单的;只是搜索/替换),或者只设置一次间隔

例如,可以使用
setTimeout
数到五:

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

如果您希望某些代码使用Interval定期运行以停止,则必须调用
clearInterval
。请注意,我们只调用
setInterval
一次,而每次我们不想让它继续的时候都调用
setTimeout

显然,您把
setInterval
错当成了
setTimeout
setInterval
n
毫秒运行一次附带的函数,而
setTimeout
仅在
n
毫秒后执行一次

我想你想“打勾到5点”,所以:

功能增加(旧、步进、neu){
var i=0;
间隔=设置间隔(函数(){
如果(i<5){
//在这个“滴答声”做点什么
控制台日志(i);
i++;
}否则{
//否则,停下来
间隔时间;
}
},80);
}
增加();
var count = 0;
function intervalFired() {
    count++;
    if(count >= 5) {
        clearInterval(interval);
    }
}
var interval = setInterval(intervalFired, 1000);
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();