Javascript 设置间隔不';似乎不喜欢它调用的函数中的()。为什么?
当我执行以下操作时,Javascript 设置间隔不';似乎不喜欢它调用的函数中的()。为什么?,javascript,node.js,setinterval,Javascript,Node.js,Setinterval,当我执行以下操作时,incidentController在10秒后被调用,并且每隔10秒继续执行,没有任何问题: // This works fine in nodejs v0.11.13 setInterval(incidentController, 10 * 1000); function incidentController () { console.log ('executed'); } 但是,这会立即执行,,并在第二次迭代时抛出以下错误: //This doesn't. The
incidentController
在10
秒后被调用,并且每隔10
秒继续执行,没有任何问题:
// This works fine in nodejs v0.11.13
setInterval(incidentController, 10 * 1000);
function incidentController () {
console.log ('executed');
}
但是,这会立即执行,,并在第二次迭代时抛出以下错误:
//This doesn't. The parens which wrap (123) cause the error.
setInterval(incidentController(123), 10 * 1000);
function incidentController (someInt) {
console.log ('executed: ', someInt);
}
错误:
timers.js:287
callback.apply(此参数为args);
^
TypeError:无法读取未定义的属性“apply”
at包装器[as_onTimeout](timers.js:287:13)
在Timer.listOnTimeout(timers.js:133:15)
它看起来像是incidentController
在某种程度上是/变成了未定义的。有人能解释为什么这是预期的行为吗(我想是的,无论如何)
我可以很容易地解决这个问题,但我只是好奇它为什么会这样做——这会使传递参数值变得不那么方便,因为我不能在setInterval
语句本身内部进行传递。setInterval
接受函数对象作为第一个参数。但是,当你这样做的时候
setInterval(incidentController(123), 10 * 1000);
您正在传递调用incidentController的结果,该结果是未定义的
(在JavaScript中,如果函数未显式返回任何内容,则默认情况下,将返回未定义的
)。这就是为什么会出现错误
无法读取未定义的属性“apply”
它正在尝试调用未定义
上的应用
函数
由于我不能在setInterval
语句本身中进行传递,因此传递参数值就不那么方便了
不,先生。您可以方便地将参数传递给setInterval
本身中的回调函数,如下所示
setInterval(incidentController, 10 * 1000, 123);
现在,当调用incidentController
时,每隔10秒,123
将作为第一个参数传递给它。像这样使用setInterval
是不正确的
setInterval(incidentController(123), 10 * 1000);
因为它需要一个函数作为第一个参数(不是一个有结果的已执行函数)
如果希望将参数传递给回调,则应使用匿名函数包装函数调用,如
setInterval(function(){incidentController(123)}, 10 * 1000);
请参见,因为您正在执行函数!:)它没有提示您要为其分配引用。/不知道语法setInterval(incidentController,10*1000123);。它被记录了吗?@maboiteaspam-Yup,它被记录在了,还有,哇,也不知道,这很酷。我猜这是最近的一个特写?底部显示IE10+支持回调参数。@AlfonsoGarnett大多数浏览器还不支持。但是OP已经标记了node.js。因此,这对他来说非常有效:-)