设置超时不使用功能

Jak*_*ake 3 javascript jquery

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

 setTimeout(start_countdown(),3000);
Run Code Online (Sandbox Code Playgroud)

它不起作用,无论秒数如何都会调用该函数.但是,以下函数可以正常工作,它不使用函数.

setTimeout(alert('hi'),3000);
Run Code Online (Sandbox Code Playgroud)

我怎么解决这个问题?

Utk*_*nos 11

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

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

setTimeout(start_countdown, 3000);
Run Code Online (Sandbox Code Playgroud)

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

setTimeout(function() {
    start_countdown(/* possible params */);
    /* other code here as required */
}, 3000);
Run Code Online (Sandbox Code Playgroud)

  • `setTimeout`注册一个异步事件,该事件将在(大约)指定的毫秒数内执行.它期望FUNCTION的第一个参数 - 函数文字或对其他地方指定的参数.如果你传递一个函数名,但后面带有`()`,你实际上是在那里执行函数,然后不要求函数稍后调用.您需要了解函数引用和函数调用之间的区别. (2认同)