0

我在这里陷入了某种混乱。请通过以下代码,

<script>

setInterval(function1,3000);

setInterval(function2(),3000);

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

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

</script>

如您所见,我有两个setInterval函数,一个调用 function like function1,另一个调用function2(). first 的输出是完美的,每 3 秒调用一次,3 秒后第一次调用。但是第二个被立即调用,即function2

我想那()可能在那里做事,但我不确定我在那里缺少什么。我只想知道那里发生了什么。

4

3 回答 3

3

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

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

尝试一下

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

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

setInterval(function2(),3000);

编辑

回应@harsha 的评论:“运行返回值”是什么意思

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

  • 开始执行function2()(执行它,因为它给出了括号)。
  • function2运行到完成,然后返回。
    • 在您的 OQ 中,该函数没有返回值,因此它是null
    • 我的function2的返回值是字符串“function3();”
  • 这个返回值现在被插入到setInterval()调用中
    • OQ 版本导致setInterval(null, 3000);每 3 秒不执行任何操作
    • 我的版本导致每 3 秒setInterval("function3();", 3000)调用eval("function3();");一次,然后每 3 秒运行function3一次。
于 2013-05-31T05:12:49.470 回答
1

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

例如,

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

a()执行并返回functioninto setInterval。您应该看到控制台Executed每 5 秒写入一次。

这就像数学:

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/

于 2013-05-31T05:10:48.023 回答
1

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

于 2013-05-31T05:12:02.607 回答