【问题标题】:Why setTimeout put outside a function will not be triggered?为什么setTimeout放在函数外面不会被触发?
【发布时间】:2016-01-30 13:43:27
【问题描述】:

看这两个例子

<head>
<script language="JavaScript" type="text/javascript">
var mTimer=setTimeout(foo();1000);
</script>
</head>

其他例子

<head>
<script language="JavaScript" type="text/javascript">
var mTimer;
function test(){ mTimer=setTimeout(foo();1000);}
</script>
</head>

在示例 1 中,当我们加载页面时,mTimer=setTimeout(foo();1000); 不会运行

在示例 2 中,当我们点击按钮触发 test(); 那么这一次 mTimer=setTimeout(foo();1000); 开始运行。

为什么setTimeout放在一个函数外加载页面时不会触发?

【问题讨论】:

  • 尝试setTimeout(foo, 1000) 而不是setTimeout(foo();1000)

标签: javascript


【解决方案1】:

setTimeout 绝对可以在函数之外工作。

除非foo 是一个返回另一个函数的函数,否则你很可能想要

// do this
var mTimer = setTimeout(foo, 1000);

代替

// don't do this
var mTimer = setTimeout(foo(), 1000);

不同之处在于第一个代码,对函数foo 的引用被传递给setTimeout,而在第二个代码中,foo()返回值被传递给@987654329 @


运行这段代码 sn-p 看看它是否工作

function foo() {
  alert("it works!");
}

setTimeout(foo, 1000);

【讨论】:

  • 我改变了你的建议,但它不起作用。你能提供其他解决方案吗? setInterval 可以吗?
  • 我在帖子底部提供了一个完整的代码示例。 setInterval 的行为与 setTimeout 不同
  • 我把你的代码放到我的 jsp 文件中,它只运行了 1 次
  • 当点击运行代码 sn-p 时,您的代码只运行 1 次
猜你喜欢
  • 2016-06-20
  • 2017-02-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-08-31
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多