为什么我使用setTimeout时会立即执行该方法?

Adl*_*ler 60 javascript settimeout

我正在尝试使用setTimeout编写一个简单的代码,并且setTimeout不会等待它所设想的时间并且代码立即执行.我究竟做错了什么?

setTimeout(testfunction(), 2000);
Run Code Online (Sandbox Code Playgroud)

Mat*_*Mat 120

您正在立即调用该函数并调度其返回值.

使用:

setTimeout(testFunction, 2000);
                       ^
Run Code Online (Sandbox Code Playgroud)

注意:没有parens.

  • @Adler:是:`setTimeout(function(){alert("test");},2000);` (27认同)
  • 好的,谢谢..但是有没有办法将参数发送到函数,如setTimeout(testFunction(obj),2000)??!顺便说一下这个也不会工作setTimeout(alert("test"),2000).. (3认同)
  • @Adler:可以做`setTimeout(alert,2000,"test")`但IE不支持它. (2认同)

Jos*_*eti 21

删除括号

setTimeout(testfunction(), 2000);
Run Code Online (Sandbox Code Playgroud)

如果要将参数发送到函数,可以创建一个匿名函数,然后调用所需的函数.

setTimeout(function() {

    testfunction('hello');

}, 2000);
Run Code Online (Sandbox Code Playgroud)

编辑

有人建议发送一个字符串作为setTimeout的第一个参数.我建议不要遵循这个并且永远不要将字符串作为setTimeout的第一个参数发送,因为将使用eval函数.这是不好的做法,如果可能应该避免.


Emi*_*röm 6

删除测试函数名称后的括号:

setTimeout(testfunction, 2000);
Run Code Online (Sandbox Code Playgroud)

原因是setTimeout的第一个参数应该是函数引用,而不是函数的返回值.在您的代码中,testfunction立即调用,并将返回值发送到setTimeout.