Rus*_*her 3 javascript setinterval node.js
当我执行以下操作时,incidentController在10秒后调用并继续执行,每秒都没有问题10:
// This works fine in nodejs v0.11.13
setInterval(incidentController, 10 * 1000);
function incidentController () {
console.log ('executed');
}
Run Code Online (Sandbox Code Playgroud)
但是,这会立即执行并在第二次迭代时抛出以下错误:
//This doesn't. The parens which wrap (123) cause the error.
setInterval(incidentController(123), 10 * 1000);
function incidentController (someInt) {
console.log ('executed: ', someInt);
}
Run Code Online (Sandbox Code Playgroud)
错误:
timers.js:287
callback.apply(this, args);
^
TypeError: Cannot read property 'apply' of undefined
at wrapper [as _onTimeout] (timers.js:287:13)
at Timer.listOnTimeout (timers.js:133:15)
Run Code Online (Sandbox Code Playgroud)
似乎incidentController是/变得undefined某种程度.有人可以解释为什么这是预期的行为(我认为它是,无论如何)?
我可以很容易地解决这个问题,但我只是好奇它为什么会这样做 - 使得传递参数值不太方便,因为我不能在setInterval语句本身内完成它.
setInterval接受一个函数对象作为第一个参数.但是,当你这样做的时候
setInterval(incidentController(123), 10 * 1000);
Run Code Online (Sandbox Code Playgroud)
您正在传递调用的结果incidentController,这是undefined(在JavaScript中,如果函数未显式返回任何内容,则默认情况下undefined将返回).这就是你得到错误的原因
Cannot read property 'apply' of undefined
Run Code Online (Sandbox Code Playgroud)
它试图调用该apply函数undefined.
使得传递参数值不太方便,因为我无法在
setInterval语句本身内完成
不,先生.你可以方便地将参数传递给回调函数setInterval,就像这样
setInterval(incidentController, 10 * 1000, 123);
Run Code Online (Sandbox Code Playgroud)
现在,incidentController调用时,每隔10秒,123将作为第一个参数传递给它.