Javascript clearInterval什么也不做

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

很简单,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;
    }
});

必须将变量设置为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确实如此(这就是我没有回滚编辑的原因)-只是说你不应该依赖它是一个整数(至少在没有仔细检查规范的情况下)