我有以下代码:

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将在每个时间间隔执行该函数,而不是执行其结果(不执行任何操作)。

07-24 18:58