我正在尝试使用setTimeout编写一个简单的代码,而setTimeout只是不会等到它想要的时间并且代码立即执行。 我做错了什么?
$("#btn1").click(function () {
if ("something") {
$("#div1").slideUp();
setTimeout(testfunction(), 2000);
}
}
答案 0 :(得分:116)
您正在立即调用该函数并安排其返回值。
使用:
setTimeout(testFunction, 2000);
^
注意:没有parens。
答案 1 :(得分:21)
删除括号
setTimeout(testfunction(), 2000);
如果要将参数发送到函数,可以创建一个匿名函数,然后调用所需的函数。
setTimeout(function() {
testfunction('hello');
}, 2000);
修改强>
有人建议发送一个字符串作为setTimeout的第一个参数。我建议不要遵循这个并且永远不要将字符串作为setTimeout的第一个参数发送,因为将使用eval函数。这是不好的做法,如果可能应该避免。
答案 2 :(得分:6)
删除测试功能名称后的括号:
setTimeout(testfunction, 2000);
原因是setTimeout的第一个参数应该是函数 reference ,而不是函数的返回值。在您的代码中,立即调用testfunction
,并将返回值发送到setTimeout。
答案 3 :(得分:2)
嗯,你可能得到了答案,但我正在解释原因和解决方案。有两种方法可以在需要的时间后调用功能。
1. setTimeout(“FUNC_NAME()',TIME_IN_MS);
这里的双引号内的FUNC_NAME是您想要在TIME_IN_MS毫秒之后调用的原始函数。这是因为如果你没有引用引号,那么当java脚本被解释时,函数会立即执行,你的目的就会失败。为了让口译员跳过这个陈述,我们需要在这里加上引号
2. setTimeout(function(){FUNC_NAME()},TIME_IN_MS);
这里创建匿名函数,告诉解释器在一定时间后执行而不是评估时间。
由于 shaILU
答案 4 :(得分:2)
首先删除括号:
setTimeout(testfunction, 2000);
然后,如果要在setTimeout
函数中传递参数,则可以通过以下方式传递:
setTimeout(testfunction, 2000, param1, param2);
注意:您可以根据功能要求传递多个参数。
答案 5 :(得分:0)
删除括号,当前您正在立即调用该函数。当前传递给setTimeout的是testfunction()调用返回的值,但是您应该传递给setTimeout的第一个参数是函数引用
setTimeout(testfunction, 2000);
答案 6 :(得分:-1)
var getMovieDetails = (function getMovieDetails(movieID) {
$.getJSON(
"https://www.omdbapi.com/?",
{ apikey: "af2beff5", i: movieID },
(movieData) => {
if (movieData.Response != "True") {
console.error(movieData.Error);
return;
}
$(poster).attr("src", movieData.Poster);
$(title).html(movieData.Title);
$(releasedRating).html(movieData.Year + " | " + movieData.imdbRating);
$(runtimeGenre).html(movieData.Runtime + " | " + movieData.Genre);
$(director).html(movieData.Director);
$(actors).html(movieData.Actors);
$(plot).html(movieData.Plot);
}
);
})
setTimeout(getMovieDetails, 3000);