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

时间:2013-08-12 07:14:41

标签: javascript settimeout

我很难理解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)时要求返回值。

坦率地说,除了“一个有效,有一个无效”之外,我不明白其他区别。为什么前者也不尊重延迟论证?

2 个答案:

答案 0 :(得分:7)

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`

答案 1 :(得分:-3)

var go = function () {
  console.log('GO GO GO!');
};

setTimeout(go, 2000);