setInterval中的Javascript函数

时间:2014-01-02 14:35:05

标签: javascript function setinterval parentheses

我有以下代码:

var foo=5;
var los= function (){
    alert(foo);};
setInterval(los, 1000);

正常工作。

如果我将其更改为:

var los= function (){
    alert(foo);};
setInterval(los(), 1000);

它只执行一次,在控制台中没有错误。 有人可以解释为什么当我在los函数中包含setInterval之后的parentesis时会发生这种情况吗?

3 个答案:

答案 0 :(得分:6)

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

setInterval需要传入的函数,而不是undefined,这是los返回的内容。但是,它没有抱怨 - 它只是没有做任何事情。

答案 1 :(得分:3)

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

los

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

los()

所以当你这样做时:

setInterval(los(), 1000)

您没有为函数设置间隔,而是设置函数的结果。因此,例如,如果函数返回true,那么您基本上就是这样写的:

setInterval(true, 1000)

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

setInterval(los, 1000)

那样setInterval将每个间隔执行该函数,而不是执行其结果(不执行任何操作)。

答案 2 :(得分:1)

你在第二个中获得的()意味着调用函数,然后将结果传递给setInterval。括号是明确请求调用函数的运算符;毕竟,这就是为什么你把括号放在setInterval的参数周围。

函数的名称本身就是JavaScript中的有效表达式。这种表达式的值是对函数的引用。这是你在设置间隔计时器时想要的值 - 你想告诉系统在计时器到期时要调用什么函数,所以你传递一个对它的引用。