Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/35.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 设置间隔不';似乎不喜欢它调用的函数中的()。为什么?_Javascript_Node.js_Setinterval - Fatal编程技术网

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。因此,这对他来说非常有效:-)