3

我正在使用以下内容暂停 javascript 几秒钟:

 setTimeout(start_countdown(),3000);

它不起作用,无论秒数如何,都会调用该函数。但是,以下函数确实有效,它不使用函数。

setTimeout(alert('hi'),3000);

我该如何解决这个问题?

4

4 回答 4

11

您需要传递函数引用。您正在传递函数的返回值。

区别在于:一个是您想要执行的函数的蓝图,另一个意味着您正在立即执行该函数并将其返回值传递给setTimeout.

setTimeout(start_countdown, 3000);

如果你想做一些比简单地调用命名函数更复杂的事情,或者你想将一个参数传递给命名函数,你需要将一个匿名函数传递给超时并在其中调用你的函数:

setTimeout(function() {
    start_countdown(/* possible params */);
    /* other code here as required */
}, 3000);
于 2012-08-01T10:15:32.903 回答
3

如果您不需要传递参数,请不要使用 ()

setTimeout(start_countdown,3000);

如果你这样做,你必须包装你的功能

setTimeout(function(){start_countdown(parameter)},3000);
于 2012-08-01T10:15:44.580 回答
1

改写

setTimeout(start_countdown, 3000);

没有括号()
,第二个例子也可以写成

setTimeout(function() { alert('hi'); }, 3000);
于 2012-08-01T10:13:26.530 回答
0

在不同的浏览器中,它以不同的方式工作。在 IE 中,您需要使用匿名函数将参数传递给回调:

setTimeout(function(){alert('hi')},3000);

于 2012-08-01T10:16:08.860 回答