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

IT技术 javascript settimeout
2021-01-28 22:47:12

我正在尝试用 编写一个简单的代码setTimeout,但是setTimeout它不会等待它应该等待的时间并且代码会立即执行。我究竟做错了什么?

setTimeout(testfunction(), 2000);
6个回答

您正在立即调用该函数并安排其返回值。

用:

setTimeout(testFunction, 2000);
                       ^

注意:没有括号。

@阿德勒:是的: setTimeout(function() { alert("test"); }, 2000);
2021-03-12 22:47:12
好的,谢谢...但是有没有办法将参数发送到像 setTimeout(testFunction(obj),2000) 这样的函数??!顺便说一下,这不会起作用 setTimeout(alert("test"),2000)..
2021-03-13 22:47:12
@Adler:可以这样做,setTimeout(alert, 2000, "test")但 IE 不支持。
2021-04-02 22:47:12
2021-04-06 22:47:12

去掉括号

setTimeout(testfunction(), 2000);

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

setTimeout(function() {

    testfunction('hello');

}, 2000);

编辑

有人建议发送一个字符串作为setTimeout的第一个参数。我建议不要遵循这一点,也不要将字符串作为 setTimeout 的第一个参数发送,因为将使用 eval 函数。这是不好的做法,应尽可能避免。

去掉 testfunction 名称后的括号:

setTimeout(testfunction, 2000);

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

@Adler 是的,您可以在延迟参数之后传递所有参数,如下所示: setTimeout(testFunction, 2000, obj)
2021-03-18 22:47:12
好的,谢谢...但是有没有办法将参数发送到像 setTimeout(testFunction(obj),2000) 这样的函数??!顺便说一下,这不会起作用 setTimeout(alert("test"),2000)...
2021-03-31 22:47:12

好吧,您可能已经得到了答案,但我正在解释原因和解决方案。有两种方法可以在所需的时间后调用函数。

1. setTimeout("FUNC_NAME ()', TIME_IN_MS);
这里双引号内的 FUNC_NAME 是你想在 TIME_IN_MS 毫秒后调用的原始函数。这是因为如果你不加引号,那么当 java 脚本被解释时,函数会立即执行,你的目的会被打败。为了让解释器跳过我们需要在这里加引号的语句
。2. setTimeout(function () {FUNC_NAME ()}, TIME_IN_MS);
这里创建了匿名函数,告诉解释器执行 if在一定时间之后而不是评估时间。

谢谢 shaILU

先去掉括号:

setTimeout(testfunction, 2000);

然后,如果你想在setTimeout函数中传递参数,你可以这样传递:

 setTimeout(testfunction, 2000, param1, param2);

注意:您可以根据您的功能需求传递多个参数。