2013-05-31 110 views
0

我在这里陷入困惑。请通过下面的代码,SetInterval函数调用

<script> 

setInterval(function1,3000); 

setInterval(function2(),3000); 

function function1() { 
    console.log("Function1 called...."); 
} 

function function2() { 
    console.log("Function2 called...."); 
} 

</script> 

正如你可以看到我有两个setInterval功能之一调用函数像function1和另一function2()。第一个输出是完美的,每3秒调用一次,3秒后首先调用。但是第二个人没有延迟即被呼叫,即function2

我想()可能会做的事情,但我不知道我在那里失踪。我只想知道那里发生了什么。

回答

1

在第二个setInterval中,您正在执行它,并将该函数返回的值插入setInterval

例如,

setInterval(a(), 5000); 
function a(){ 
    return function(){ 
     console.log("Executed!"); 
    }; 
}; 

a()执行并返回到functionsetInterval。您应该看到控制台每5秒钟写入Executed

这就像数学:

f(x) = x + 1 
g(x) = 2 

f(g(2)) = g(x) + 2 = 4 
You replace g(2) with whatever it returns 
(you replace a() with the function in this case) 

http://jsfiddle.net/DerekL/39wNn/

+1

非常感谢Derek。 – Vinay

1

的(),使功能得到在第二种情况下立即执行。在第一种情况下,只是指向稍后作为回调函数执行的函数的指针。

4

setInterval(function1,3000);指示JS引擎每3秒执行一次函数function1

setInterval(function2(),3000);指示JS引擎运行function2一次,然后每3秒运行一次返回值。这个返回值是空的。

对于有点好玩尝试

function function2() { 
    console.log("Function2 called...."); 
    return "function3();" 
} 

function function3() { 
    console.log("Function3 called...."); 
} 

setInterval(function2(),3000); 

编辑

在效应初探改为@戒的评论:这是什么意思的“运行返回值”

setInterval(function2(),3000);将触发以下工作流程:

  • 初始执行function2()(执行它,因为它是括号给出的)。
  • function2运行完成,然后返回。
    • 在你的OQ,有从函数没有返回值,所以它是null
    • 我的函数2的返回值是字符串“功能3();”
  • 此返回值现在插入setInterval()呼叫
    • 的OQ版本的结果setInterval(null, 3000);,它什么也不做每3秒
    • 我的版本的结果setInterval("function3();", 3000),每3秒呼叫eval("function3();");,每3秒又运行function3
+1

+1的整洁的解释。 –

+0

'运行返回值'究竟是什么?我很想理解。 –

+0

@harsha - 基本上'eval([returns value]);' –