SetInterval函数调用

时间:2013-05-31 05:09:20

标签: javascript function 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

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

3 个答案:

答案 0 :(得分: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);

修改

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

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

  • 启动执行function2()(执行它,因为它给出了括号)。
  • function2运行完成,然后返回。
    • 在您的OQ中,该函数没有返回值,因此它是null
    • 我的function2的返回值是字符串“function3();”
  • 此返回值现已插入setInterval()调用
    • OQ版本产生setInterval(null, 3000);,每3秒钟不执行任何操作
    • 我的版本会生成setInterval("function3();", 3000),每3秒调用一次eval("function3();");,然后每隔3秒就会调用function3

答案 1 :(得分:1)

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

例如,

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

a()已执行并将function返回setInterval。您应该会看到控制台每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/

答案 2 :(得分:1)

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