clearInterval导致未定义变量的原因

时间:2018-08-29 12:57:45

标签: javascript jquery

这是我的代码(在button.click()函数内部)

if(inBreak === true) {
      inBreak = false;
      var timer = setInterval(function() {
        if(seconds == 0) {
          console.log(minutes);
          minutes -= 1;
          seconds = 59;
        } else {
          seconds -= 1;
        }
        $('.minutes').text(minutes);
        $('.seconds').text(seconds);
      }, 1000);
    } else {
      inBreak = true;
      console.log(timer);
      clearInterval(timer);
    }

问题是clearInterval(timer)不起作用,因为未定义计时器,但是我是在第一次单击(并使用该函数)时定义了它。

那么您有实现此目标的想法吗? 我试着用let / const代替var,但是无论如何还是不能工作:

2 个答案:

答案 0 :(得分:4)

timer是局部变量,在函数末尾被破坏。

将其存储在其他位置(例如,作为全局变量):

window.myTimer = setInterval(function() {
....

clearInterval(window.myTimer);

答案 1 :(得分:1)

我怀疑您是在timer处理程序中声明了click变量,因此在每个click上,变量timer重置

例如

function() { // event handler function
    var timer;
    if(inBreak === true) {
       // code
       timer = setInterval()
    } else {
        // code 
        console.log(timer);
    }
}

您应该在事件处理程序范围之外创建一个变量,以便该变量可用并共享相同的引用。

例如

var timer; // <- Move the declaration outside the function scope to be available and share same reference.
function() { // event handler function
    if(inBreak === true) {
       // code
       timer = setInterval()
    } else {
        // code 
        console.log(timer);
    }
}