[英]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.