繁体   English   中英

setInterval中的Javascript函数

[英]Javascript function in setInterval

我有以下代码:

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

可以正常工作。

如果我将其更改为:

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

它只执行一次,控制台中没有错误。 有人可以解释一下为什么在setInterval函数中在los之后加上括号时会发生这种情况吗?

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

setInterval需要传入的函数,而不是undefined ,这是los返回的。 但是,它没有抱怨-它什么也没做。

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

los

另一方面,它执行函数并评估其结果:

los()

因此,当您执行此操作时:

setInterval(los(), 1000)

您不是在功能上设置间隔,而是在功能的结果上设置。 因此,例如,如果函数返回true那么您实际上就是在编写:

setInterval(true, 1000)

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

setInterval(los, 1000)

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

第二种方法中的()意味着将结果传递给setInterval 之前先 调用该函数。 括号是明确要求调用函数的运算符。 这就是为什么要在setInterval的参数setInterval加上括号。

函数名称本身就是JavaScript中的有效表达式。 这样的表达式的值是对该函数的引用。 这是设置间隔计时器时想要的值-您想告诉系统计时器到期时要调用的函数,因此您要传递对它的引用。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM