我正在玩“setTimeout”功能。此代码按预期运行:
function myFunction() {
console.log('test');
setTimeout(myFunction, 1000);
}
myFunction();
它将每秒“测试”打印到控制台。
但是在运行此代码时,超时不会等待:
function myFunction() {
console.log('test');
setTimeout(myFunction(), 1000);
}
myFunction();
它用'test'来阻止我的控制台。
代码的唯一区别是myFunction()调用的括号。为什么会这样?
答案 0 :(得分:3)
这是因为通过包含括号,您实际上正在执行该函数并将其结果传递给setTimeout
。
答案 1 :(得分:3)
myFunction()
立即调用函数并将其返回值传递给setTimeout
以便稍后调用(除了返回值为undefined
,这不是一个函数(或一个字符串),这是毫无意义的。)
答案 2 :(得分:2)
setTimeout(myFunction(), 1000);
表示myFunction()返回的传递结果作为setTimeout的第一个参数。 myFunction不返回任何内容,因此setTimeout(myFunction(), 1000);
与setTimeout(undefined, 1000);