Javascript 调用clearTimeout后,setInterval将继续运行

Javascript 调用clearTimeout后,setInterval将继续运行,javascript,setinterval,cleartimeout,Javascript,Setinterval,Cleartimeout,我声明了一个全局变量sim,在其中初始化了setInterval。在progressSim函数中,我使用了clearTimeout(),但它没有停止setInterval var sim; function loop(){ var ctx1 = document.getElementById($(allChild[i]).attr('id')).getContext('2d'); dataPercent = $(allChild[i]).attr('data-percent');

我声明了一个全局变量sim,在其中初始化了setInterval。在progressSim函数中,我使用了clearTimeout(),但它没有停止setInterval

var sim;
function loop(){
    var ctx1 = document.getElementById($(allChild[i]).attr('id')).getContext('2d');
    dataPercent = $(allChild[i]).attr('data-percent');
    cw = ctx1.canvas.width;
    ch = ctx1.canvas.height;
    sim = setInterval( function() { 
         progressSim(ctx1); 
    }, 50 );

    setTimeout(function () {
        i++;                     
        if (i < allChild.length) {            
            loop();             
        }                        
    }, 20)
}

loop();

function progressSim(ctx){
    diff = ((al / 100) * Math.PI*2*10).toFixed(2);
    ctx.clearRect(0, 0, cw, ch);
    ctx.lineWidth = 15;
    ctx.fillStyle = '#09F';
    ctx.strokeStyle = "#09F";
    ctx.textAlign = 'center';
    ctx.fillText(al+'%', cw*.5, ch*.5+2, cw);
    ctx.beginPath();
    ctx.arc(100, 85, 75, start, diff/10+start, false);
    ctx.stroke();

    if(al >= 30){
        clearTimeout(sim);
    }
    al++;
}
var-sim;
函数循环(){
var ctx1=document.getElementById($(allChild[i]).attr('id')).getContext('2d');
dataPercent=$(allChild[i]).attr('data-percent');
cw=ctx1.canvas.width;
ch=ctx1.canvas.height;
sim=setInterval(函数(){
progressSim(ctx1);
}, 50 );
setTimeout(函数(){
i++;
如果(i=30){
清除超时(sim);
}
al++;
}

如果有任何问题,请告诉我。提前谢谢。

嗯,
al
progressSim
中没有定义。你怎么能指望它变成
=30

在脚本开头添加类似于
var al
的内容应该会有所帮助。

尝试过
clearInterval(sim)
?您正在尝试清除不存在的超时
sim


此外,通过再次调用超时中的循环函数,您正在创建多个
sim
间隔

我认为clearTimeout和clearInterval是可以互换的,但至少为了一致性,您应该使用适当的“对应项”。到目前为止,您做了哪些调试工作?你是否检查过它是否真的进入了if?好吧,你通过多次调用
循环
来启动多个
setInterval
s,但只有最近的一个(即
sim
references)会被清除。我在全局范围内声明了它。al不是未定义的。