setTimeout(myFunction,5000); vs setTimeout(myFunction(),5000);

时间:2016-07-07 14:41:16

标签: javascript settimeout

我正在玩“setTimeout”功能。此代码按预期运行:

function myFunction() {
    console.log('test');
    setTimeout(myFunction, 1000);
}
myFunction();

它将每秒“测试”打印到控制台。

但是在运行此代码时,超时不会等待:

function myFunction() {
    console.log('test');
    setTimeout(myFunction(), 1000);
}
myFunction();

它用'test'来阻止我的控制台。

代码的唯一区别是myFunction()调用的括号。为什么会这样?

3 个答案:

答案 0 :(得分:3)

这是因为通过包含括号,您实际上正在执行该函数并将其结果传递给setTimeout

答案 1 :(得分:3)

myFunction()立即调用函数并将其返回值传递给setTimeout以便稍后调用(除了返回值为undefined,这不是一个函数(或一个字符串),这是毫无意义的。)

答案 2 :(得分:2)

setTimeout(myFunction(), 1000);表示myFunction()返回的传递结果作为setTimeout的第一个参数。 myFunction不返回任何内容,因此setTimeout(myFunction(), 1000);setTimeout(undefined, 1000);

相同