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

Chi*_*ard 4 javascript

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

sessionClock = setInterval(function() {
  console.log("Hi")
}, 1000)
Run Code Online (Sandbox Code Playgroud)

我也尝试过这样的:

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

var sayHiStarter = setInterval(sayHi, 1000);
Run Code Online (Sandbox Code Playgroud)

这两个都启动该功能,并将"Hi"记录到控制台.

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

nil*_*ils 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);
Run Code Online (Sandbox Code Playgroud)

原则上,bind返回一个新函数,该函数setInterval使用预定义的参数调用原始函数(在本例中).因此,当您调用时sessionClock,将调用返回的函数.还有其他方面bind,但它们似乎并不适用于此背景.