对setTimeout中的第一个参数感到困惑

Confused about first argument in setTimeout

本文关键字:参数 第一个 setTimeout      更新时间:2023-09-26

我很难理解setTimeout的第一个参数以及延迟参数如何影响它。

我理解setTimeout的方式是:

setTimeout(foo, don't even think about foo until x miliseconds has passed)

但如果我们考虑这个代码:

<div id="mine"></div>
<script type="text/javascript">
function go(){
        var myDiv = document.getElementById("mine");
        myDiv.innerHTML = "Hello World";    
}
setTimeout(go(), 2000)
</script>

go在不等待2秒的情况下立即运行。

正如我之前的许多人所指出的,setTimeout(go(), 2000)是在我实际想要setTimeout(go, 2000)时要求返回值。

坦率地说,我不明白除了"一个有效,一个无效"之外的区别。为什么前者不尊重延迟的论点?

JavaScript中的函数是一个对象。go是函数对象,go()执行go函数并返回其值。setTimeout期望一个函数,因此是go,而不是go()

function go(){
  return 'hello';
}
console.log(go); //=> function go(){}, a function object
console.log(go()); //=> 'hello', a string returned by the function `go`
var go = function () {
  console.log('GO GO GO!');
};
setTimeout(go, 2000);