我正在尝试用 编写一个简单的代码setTimeout
,但是setTimeout
它不会等待它应该等待的时间并且代码会立即执行。我究竟做错了什么?
setTimeout(testfunction(), 2000);
我正在尝试用 编写一个简单的代码setTimeout
,但是setTimeout
它不会等待它应该等待的时间并且代码会立即执行。我究竟做错了什么?
setTimeout(testfunction(), 2000);
您正在立即调用该函数并安排其返回值。
用:
setTimeout(testFunction, 2000);
^
注意:没有括号。
去掉括号
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);
这里创建了匿名函数,告诉解释器执行 if在一定时间之后而不是评估时间。
谢谢 shaILU
先去掉括号:
setTimeout(testfunction, 2000);
然后,如果你想在setTimeout
函数中传递参数,你可以这样传递:
setTimeout(testfunction, 2000, param1, param2);
注意:您可以根据您的功能需求传递多个参数。