如何设置间隔,清除间隔并传递参数(定时器)

时间:2018-10-08 08:25:51

标签: javascript setinterval

文档指出,需要在setIntervalId中传递clearInterval(),因此该函数必须类似于:

var logMe = setInterval(function () {...}, interval)

页面加载后,上述功能也会被自动调用。

如果我尝试将其放入匿名函数中,如下所示:

var logMe = function (interval) {
    setInterval(function () {
        console.log("whatever");
    }, interval);
};

我可以传递一个interval参数,但是不能用以下命令停止它:

function stopLogMe() {
    window.clearInterval(logMe);
};

问题是,我可以创建一个函数“ setInterval”以传递参数(间隔)并使用clearInterval停止它吗?

2 个答案:

答案 0 :(得分:1)

定义变量并在调用logMe函数时为其分配计时器:

var interval = 2000;
var timer = null;

function logMe() {
  timer = setInterval(function() {
    console.log('hello!');
  }, interval);
}

function stopLogMe() {
  window.clearInterval(timer);
}
<button onclick="logMe();">Start</button>
<button onclick="stopLogMe();">Stop</button>

答案 1 :(得分:1)

您需要以某种方式将ID和stop函数封装在对象或函数中。该ID必须在记录器的本地上下文中,以便它在需要停止时可以访问它。它还使您可以创建一个以上的记录器,而无需复杂化。

const Interval = function (fn, interval) {
  this.id = setInterval(fn, interval)

  this.clear= function () {
    clearInterval(this.id)
  }
}

// Create new logger
const myLogger = new Interval(function () {
  console.log('Log me')
}, 1000)

// Clear interval after 5 seconds.
setTimeout(myLogger.clear.bind(myLogger), 5000)