为什么在使用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);
这里创建匿名函数,告诉解释器在一段时间后执行,而不是评估时间。
谢谢沙鲁