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)
它只在控制台中执行一次且没有错误.有人可以解释一下,为什么当我los在setInterval功能中包括胃肠功能后会发生这种情况?
因为您正在执行los(),然后将该(单个)执行的结果传递给setInterval函数.
setInterval需要传递的,而不是一个功能undefined,这是los返回.但是,它没有抱怨 - 它只是没有做任何事情.
请记住,在 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将在每个间隔执行函数,而不是执行其结果(它不执行任何操作)。