文档指出,需要在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停止它吗?
答案 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)