我正在尝试使用编写一个简单的代码setTimeout
,但setTimeout
只是不愿等待该时间而该代码立即执行。我究竟做错了什么?
setTimeout(testfunction(), 2000);
我正在尝试使用编写一个简单的代码setTimeout
,但setTimeout
只是不愿等待该时间而该代码立即执行。我究竟做错了什么?
setTimeout(testfunction(), 2000);
Answers:
您正在立即调用该函数并计划其返回值。
采用:
setTimeout(testFunction, 2000);
^
注意:没有原谅。
setTimeout(function() { alert("test"); }, 2000);
setTimeout(alert, 2000, "test")
但是IE不支持。
删除测试功能名称后的括号:
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);
这里创建了一个匿名函数,告诉解释器执行在一定时间后而不是评估时间。
谢谢shaILU
删除括号,当前您正在立即调用该函数。当前传递给setTimeout的是testfunction()调用的返回值,但是您应该传递给setTimeout的第一个参数是函数引用
setTimeout(testfunction, 2000);
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);
()
在此充当调用运算符。但是您想将该函数传递给setTimeout
,而不是调用它。