为什么setInterval在我只分配时会启动?

时间:2015-11-09 15:37:47

标签: javascript

我正在分配一个变量,一个使用setInterval的函数,但我不想让函数运行直到我调用它。但是,该函数仅从赋值语句运行。

sessionClock = setInterval(function() {
  console.log("Hi")
}, 1000)

我也尝试过这样:

sayHi = function() {
  console.log("Hi");
}

var sayHiStarter = setInterval(sayHi, 1000);

这两个都启动了该功能,并将“Hi”记录到控制台。

为什么它在分配时运行?我能做些什么来解决这个问题?

2 个答案:

答案 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();