ClearInterval不清除SetInterval

Ank*_*arg 3 javascript clearinterval

当我们使用SetInterval返回的值调用clearInterval时,它会使该值为null或未定义.

我调用clearInterval来清除setInterval,但显然setInterval的值保持不变,即使在调用clearInterval后也不会改变.被认为是null还是未定义?这是我的代码片段

var setIntervalId; // declared in global scope
//lined of code

function autorefresh() {
  if (statesCount > 0) {
    setIntervalId = setInterval(function() {
        //lines of code
        // calling some handler
    }, 30000);
  }

  if (statesCount === 0) {
    clearInterval(setIntervalId);
  }
}
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,我每隔30秒调用一次setInterval函数,第一次调用时会为setIntervalId赋值,但即使在调用clearInterval之后,该值仍然存在.在调用clearInterval之后它应该变为null还是未定义?如果它应该为null或undefined我应该在这里做什么.我在全局范围内定义了setIntervalId.

Jar*_*Par 6

该函数clearInterval不会清除传递给它的值.如果你想清除它,你必须自己做

clearInterval(setIntervalId);
setIntervalId = undefined;
Run Code Online (Sandbox Code Playgroud)

请注意,您似乎没有正确地保护初始呼叫setInterval.这可能导致多次调用,因此您有多个间隔设置.我认为你应该将你的初始if块增加到以下内容

if (statesCount > 0 && typeof(setIntervalId) === 'undefined') { 
  ...
}
Run Code Online (Sandbox Code Playgroud)


Que*_*tin 6

调用clearInterval之后,它应该变为null还是未定义?

没有。

它只是个数字。清除间隔后,该数字只是历史上的好奇心。

如果undefined愿意,可以在使用后明确分配给它clearInterval。除非您正在使用它来跟踪您的函数当前是否正在定期运行,否则不需要这样做。