繁体   English   中英

设置超时(我的功能,5000); vs setTimeout(myFunction(), 5000);

[英]setTimeout(myFunction, 5000); vs setTimeout(myFunction(), 5000);

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

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);相同setTimeout(undefined, 1000);

myfunction() 将它的返回值传递给“SetTimeOut”并执行:setTimeout(RetunValue, 1000) 然后出错...

myfunction 执行附加到它的过程

在控制台上打印“测试”

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM