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();