Javascript clearInterval什么也不做
很简单,setIntervall正常启动“t”,go为false,clearinterval不执行任何操作,go为true。因此,如果第三次执行app.post,我有两个间隔,处理t。我不明白为什么Javascript clearInterval什么也不做,javascript,setinterval,clearinterval,Javascript,Setinterval,Clearinterval,很简单,setIntervall正常启动“t”,go为false,clearinterval不执行任何操作,go为true。因此,如果第三次执行app.post,我有两个间隔,处理t。我不明白为什么 go= true; app.post('/s', function s(req, res){ if (go){ setInterval(t, 3000); go = false; }else{ clearInterval(t);
go= true;
app.post('/s', function s(req, res){
if (go){
setInterval(t, 3000);
go = false;
}else{
clearInterval(t);
go = true;
}
});
必须将变量设置为setInterval,如下所示:
go= true;
var interval = 0;
app.post('/s', function s(req, res){
if (go){
interval = setInterval(t, 3000);
go = false;
}else{
clearInterval(interval);
go = true;
}
});
必须将变量设置为setInterval,如下所示:
go= true;
var interval = 0;
app.post('/s', function s(req, res){
if (go){
interval = setInterval(t, 3000);
go = false;
}else{
clearInterval(interval);
go = true;
}
});
setInterval
返回需要传递给clearInterval
的标识符-您不能通过传递函数引用来清除它:
go= true;
var interval=0;
app.post('/s', function s(req, res){
if (go){
interval = setInterval(t, 3000);
go = false;
}else{
clearInterval(interval);
go = true;
}
});
setInterval
返回需要传递给clearInterval
的标识符-您不能通过传递函数引用来清除它:
go= true;
var interval=0;
app.post('/s', function s(req, res){
if (go){
interval = setInterval(t, 3000);
go = false;
}else{
clearInterval(interval);
go = true;
}
});
首先,;您必须按照其他答案的建议,将setInterval分配给一个变量,如果它仍然不起作用,请继续阅读下面的内容 好吧,我已经经历了太多同样的问题,通常我只是顺其自然, 但大多数时候,我意识到在清除interval之后,interval会继续运行,这可能会影响设备的性能(就像有一个无限循环) 所以我做了一些研究,发现了问题所在,并编写了一个简单的代码来解决它 现在,在大多数情况下,当您启动一个间隔(很可能由事件触发)时,会声明该间隔的多个实例(无论出于何种原因) 因此,当您稍后清除间隔时,您只清除*顶级间隔,然后设置下一个级别间隔。 (顶级可能不是正确的词) 因此,为了真正清除间隔,我使用了以下方法: 设置间隔:
if(!timer)
timer =setInterval(myFunction, 1000);
clearInterval(timer);
timer=null;
while (timer!== null){
timer=null;
}
清除间隔:
if(!timer)
timer =setInterval(myFunction, 1000);
clearInterval(timer);
timer=null;
while (timer!== null){
timer=null;
}
您可能会决定清除while循环中的间隔,但我发现这对我来说是有效的,而且效率更高
确保检查间隔变量的范围(即在上述情况下的计时器)
首先,;您必须按照其他答案的建议,将setInterval分配给一个变量,如果它仍然不起作用,请继续阅读下面的内容 好吧,我已经经历了太多同样的问题,通常我只是顺其自然, 但大多数时候,我意识到在清除interval之后,interval会继续运行,这可能会影响设备的性能(就像有一个无限循环) 所以我做了一些研究,发现了问题所在,并编写了一个简单的代码来解决它 现在,在大多数情况下,当您启动一个间隔(很可能由事件触发)时,会声明该间隔的多个实例(无论出于何种原因) 因此,当您稍后清除间隔时,您只清除*顶级间隔,然后设置下一个级别间隔。 (顶级可能不是正确的词) 因此,为了真正清除间隔,我使用了以下方法: 设置间隔:
if(!timer)
timer =setInterval(myFunction, 1000);
clearInterval(timer);
timer=null;
while (timer!== null){
timer=null;
}
清除间隔:
if(!timer)
timer =setInterval(myFunction, 1000);
clearInterval(timer);
timer=null;
while (timer!== null){
timer=null;
}
您可能会决定清除while循环中的间隔,但我发现这对我来说是有效的,而且效率更高
确保检查间隔变量的范围(即在上述情况下的计时器)
var x=setInterval(…)
。。。然后clearInterval(x)代码>var x=setInterval(…)
。。。然后clearInterval(x)
setInterval返回整数,因此将变量设置为整数可以更好地避免变量类型转换。@GuramiDagundaridze,从来没有想过会这样!Thanks@GuramiDagundaridze我不确定规范是否明确规定它必须是一个整数,只是一个唯一的句柄。它肯定会说,clearInterval
会忽略未知的输入,所以它不会被初始化是安全的。@James Thorpe不,你的答案是对的,这只是性能问题,即使是一个小问题,事情也会累加起来quickly@GuramiDagundaridze确实如此(这就是我没有回滚编辑的原因)-只是说您不应该依赖它是整数(至少在没有仔细检查规范的情况下是这样),setInterval返回整数,所以将变量设置为整数更好,以避免变量类型转换。@GuramiDagundaridze,从来没有这样想过!Thanks@GuramiDagundaridze我不确定规范是否明确规定它必须是一个整数,只是一个唯一的句柄。它肯定会说,clearInterval
会忽略未知的输入,所以它不会被初始化是安全的。@James Thorpe不,你的答案是对的,这只是性能问题,即使是一个小问题,事情也会累加起来quickly@GuramiDagundaridze确实如此(这就是我没有回滚编辑的原因)-只是说你不应该依赖它是一个整数(至少在没有仔细检查规范的情况下)