我有以下代码:
var foo=5;
var los= function (){
alert(foo);};
setInterval(los, 1000);
可以正常工作。
如果我将其更改为:
var los= function (){
alert(foo);};
setInterval(los(), 1000);
它只执行一次,控制台中没有错误。
有人可以解释一下为什么我在
los
函数中的setInterval
之后加上括号时会发生这种情况吗? 最佳答案
请记住,在JavaScript中,函数是一个对象,就像其他任何变量一样传递。因此,这是对该函数的引用:
los
另一方面,它执行函数并评估其结果:
los()
因此,当您执行此操作时:
setInterval(los(), 1000)
您不是在功能上设置间隔,而是在功能的结果上设置。因此,例如,如果函数返回
true
,那么您实际上就是在编写:setInterval(true, 1000)
该函数执行一次,然后重复间隔以获取结果。您想要的是在间隔中使用函数引用本身:
setInterval(los, 1000)
这样,
setInterval
将在每个时间间隔执行该函数,而不是执行其结果(不执行任何操作)。