【问题标题】:How to Use clearInterval() Within Revealing Module Pattern如何在显示模块模式中使用 clearInterval()
【发布时间】:2015-07-15 09:33:37
【问题描述】:

我正在编写一个计时器函数,它在一个显示模块模式中使用setInterval。我可以让计时器正常启动,但我无法停止间隔。

var timer = (function() {
    var startTimer = function() {
        setInterval(function() {
            // Do Stuff
        }, 1000);
    };

    var stopTimer = function() {
        clearInterval(timer.startTimer());
    };

    return {
        startTimer: startTimer,
        stopTimer: stopTimer
    };
})();

timer.startTimer(); // Works!
timer.stopTimer(); // Doesn't Work!

有什么想法吗?

【问题讨论】:

  • startTimer() 必须返回调用 setInterval() 的结果,但这也不起作用,因为在 stopTimer() 中,您正在创建一个新间隔,然后立即清除
  • 你的 var startTimer 不是指一个区间,而是一个创建新区间的函数。

标签: javascript revealing-module-pattern


【解决方案1】:
var timer = (function() {

  var timerRef = null;
  var startTimer = function() {
      timerRef = setInterval(function() {
          // Do Stuff
      }, 1000);
  };

  var stopTimer = function() {
      clearInterval(timerRef);
  };

  return {
      startTimer: startTimer,
      stopTimer: stopTimer
  };

})();

【讨论】:

    【解决方案2】:

    试试这个:

    var timer = (function() {
        var intervalId;
    
        var startTimer = function() {
            intervalId = setInterval(function() {
                // Do Stuff
            }, 1000);
        };
    
        var stopTimer = function() {
            clearInterval(intervalId);
        };
    
        return {
            startTimer: startTimer,
            stopTimer: stopTimer
        };
    })();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-04-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多