setInterval中的Javascript函数

ato*_*mtm 1 javascript function parentheses setinterval

我有以下代码:

var foo=5;
var los= function (){
    alert(foo);};
setInterval(los, 1000);
Run Code Online (Sandbox Code Playgroud)

哪个工作正常.

如果我将其更改为:

var los= function (){
    alert(foo);};
setInterval(los(), 1000);
Run Code Online (Sandbox Code Playgroud)

它只在控制台中执行一次且没有错误.有人可以解释一下,为什么当我lossetInterval功能中包括胃肠功能后会发生这种情况?

joh*_*rdy 6

因为您正在执行los(),然后将该(单个)执行的结果传递给setInterval函数.

setInterval需要传递的,而不是一个功能undefined,这是los返回.但是,它没有抱怨 - 它只是没有做任何事情.


Dav*_*vid 5

请记住,在 JavaScript 中,函数是一个对象,像任何其他变量一样传递。所以这是对函数的引用:

los
Run Code Online (Sandbox Code Playgroud)

另一方面,这将执行函数并计算其结果:

los()
Run Code Online (Sandbox Code Playgroud)

所以当你这样做时:

setInterval(los(), 1000)
Run Code Online (Sandbox Code Playgroud)

您不是为函数设置间隔,而是为函数的结果设置间隔。因此,例如,如果函数返回,true那么您实际上是在编写以下代码:

setInterval(true, 1000)
Run Code Online (Sandbox Code Playgroud)

该函数执行一次,然后针对其结果重复间隔。你想要的是在区间中使用函数引用本身:

setInterval(los, 1000)
Run Code Online (Sandbox Code Playgroud)

这种方式setInterval将在每个间隔执行函数,而不是执行其结果(它不执行任何操作)。