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

标签 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)

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

最佳答案

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`

关于javascript - 对 setTimeout 中的第一个参数感到困惑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18181384/

相关文章:

javascript - 在不破坏此页面样式的情况下在网页中显示 HTML 邮件消息

javascript - 如何让 Alert 在加载图像后运行?

javascript - jQuery 中的旋转轮

javascript - 留在 anchor #link 的页面顶部

javascript - setTimeout 改变超时值

javascript - ACE 编辑器 applyDeltas 似乎与 setTimeout 不兼容

javascript - 机器人的用户名未定义

javascript - 订阅 KnockoutJS 中现有 DOM 元素的绑定(bind)

javascript - 使用 jquery 累积或删除小数

javascript - 根据日期消除数组条目