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

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

本文关键字:setTimeout myFunction vs 5000      更新时间:2023-09-26

我正在玩"setTimeout"函数。此代码按预期运行:

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

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

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

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

它会向我的控制台发送"测试"垃圾邮件。

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

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

myFunction()立即调用该函数并将其返回值传递给稍后调用的setTimeout(除了它的返回值是undefined,它不是函数(或字符串),所以这是没有意义的)。

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

myfunction()将其返回值传递给"SetTimeOut"并执行: setTimeout( RetunValue , 1000)然后错误...

myfunction执行附加到它的过程

在控制台上打印"测试"