我正在分配一个变量,一个使用setInterval的函数,但我不想让函数运行直到我调用它。但是,该函数仅从赋值语句运行。
sessionClock = setInterval(function() {
console.log("Hi")
}, 1000)
我也尝试过这样:
sayHi = function() {
console.log("Hi");
}
var sayHiStarter = setInterval(sayHi, 1000);
这两个都启动了该功能,并将“Hi”记录到控制台。
为什么它在分配时运行?我能做些什么来解决这个问题?
答案 0 :(得分:8)
如果您只想将函数绑定到setInterval,但稍后再调用它,则可以使用bind:
var sessionClock = setInterval.bind(null, function() {
console.log("Hi")
}, 1000);
//... later
var myInterval = sessionClock(); // start the timer
// ... later if you need to clear it
clearInterval(myInterval);
原则上,bind返回一个新函数,该函数使用预定义的参数调用原始函数(在本例中为setInterval
)。因此,当您调用sessionClock
时,将调用返回的函数。 bind
还有其他方面,但它们似乎并不适用于此背景。
答案 1 :(得分:1)
对setInterval
的调用不返回函数,而是返回创建的时间间隔的标识。当您不希望它再次执行时,此ID用于删除间隔:
sessionClock = setInterval(function() {
console.log("Hi")
}, 1000)
...
clearInterval(sessionclock);
你想要的是这样的:
sessionClock = function () {
return setInterval(function() {
console.log("Hi")
},
1000);
}
//When needed
var intervalId=sessionClock();