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

我试图用setTimeout编写一个简单的代码,setTimeout不会等待它假设的时间,并立即执行代码。 我究竟做错了什么?

$("#btn1").click(function () { if ("something") { $("#div1").slideUp(); setTimeout(testfunction(), 2000); } } 

你正在调用函数并安排它的返回值。

使用:

 setTimeout(testFunction, 2000); ^ 

注意:没有parens。

删除括号

 setTimeout(testfunction(), 2000); 

如果你想发送参数给函数,你可以创建一个匿名函数,然后调用你想要的函数。

 setTimeout(function() { testfunction('hello'); }, 2000); 

编辑

有人建议发送一个字符串作为setTimeout的第一个参数。 我建议不要跟着这个,永远不会发送一个字符串作为setTimeout的第一个参数,导致eval函数将被使用。 这是不好的做法,应尽可能避免。

删除testfunction名称后面的括号:

 setTimeout(testfunction, 2000); 

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

那么你可能已经得到了答案,但我正在解释的原因和解决方案。 有两种方法可以在需要的时间之后调用一个函数。

1. setTimeout(“FUNC_NAME()”,TIME_IN_MS);
这里,双引号内的FUNC_NAME是您希望在TIME_IN_MS毫秒后调用的原始函数。 这是因为如果你不把引号,而Java脚本得到解释功能将立即执行,你的目的将被击败。 为了让翻译跳过声明,我们需要在这里引用引号。
2. setTimeout(function(){FUNC_NAME()},TIME_IN_MS);
这里创建匿名函数,告诉解释器在一段时间后执行,而不是评估时间。

谢谢沙鲁