Javascript 设置超时(myFunction,5000);vs setTimeout(myFunction(),5000);

Javascript 设置超时(myFunction,5000);vs setTimeout(myFunction(),5000);,javascript,settimeout,Javascript,Settimeout,我在玩“setTimeout”函数。此代码按预期运行: function myFunction() { console.log('test'); setTimeout(myFunction, 1000); } myFunction(); 它每秒向控制台打印一次“测试” 但运行此代码时,超时没有等待: function myFunction() { console.log('test'); setTimeout(myFunction(), 1000); } myF

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

function myFunction() {
    console.log('test');
    setTimeout(myFunction, 1000);
}
myFunction();
它每秒向控制台打印一次“测试”

但运行此代码时,超时没有等待:

function myFunction() {
    console.log('test');
    setTimeout(myFunction(), 1000);
}
myFunction();
而且它在我的控制台上滥发“test”


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

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

myFunction()
立即调用函数,并将其返回值传递给
setTimeout
,以便稍后调用(除了它的返回值是未定义的,它不是函数(或字符串),因此是无意义的)。

setTimeout(myFunction(),1000);
意味着myFunction()返回的pass结果是setTimeout的第一个参数。myFunction不返回任何内容,因此
setTimeout(myFunction(),1000)
setTimeout(未定义,1000)相同;

第二个版本只有在
myFunction()
返回一个函数或返回一个可以被评估为有效函数调用的字符串时才有意义:
const f=()=>“console.log(123)”;setTimeout(f(),1000);