Javascript 为什么使用setTimeout时会立即执行该方法?
我试图用Javascript 为什么使用setTimeout时会立即执行该方法?,javascript,settimeout,Javascript,Settimeout,我试图用setTimeout编写一个简单的代码,但是setTimeout不会等待它假定的时间,代码会立即执行。我做错了什么 setTimeout(testfunction(), 2000); setTimeout(testfunction, 2000); 您将立即调用该函数并计划其返回值 使用: 注意:无括号。删除testfunction名称后的括号: setTimeout(testfunction, 2000); 原因是setTimeout的第一个参数应该是函数引用,而不是函数的返回值。
setTimeout
编写一个简单的代码,但是setTimeout
不会等待它假定的时间,代码会立即执行。我做错了什么
setTimeout(testfunction(), 2000);
setTimeout(testfunction, 2000);
您将立即调用该函数并计划其返回值 使用:
注意:无括号。删除testfunction名称后的括号:
setTimeout(testfunction, 2000);
原因是setTimeout的第一个参数应该是函数引用,而不是函数的返回值。在代码中,会立即调用testfunction
,并将返回值发送到setTimeout。删除括号
setTimeout(testfunction(), 2000);
如果要向函数发送参数,可以创建一个匿名函数,然后该函数将调用所需的函数
setTimeout(function() {
testfunction('hello');
}, 2000);
编辑
有人建议发送一个字符串作为setTimeout的第一个参数。我建议不要遵循这一点,也不要将字符串作为setTimeout-first参数发送,因为将使用eval函数。这是一种不好的做法,如果可能的话应该避免。您可能已经得到了答案,但我正在解释原因和解决方案。有两种方法可以在所需时间后调用函数。
1.setTimeout(“FUNC_NAME(),TIME_IN_MS);
这里,双引号内的FUNC\u NAME是您希望在时间(毫秒)后调用的原始函数。这是因为如果不加引号,那么在解释java脚本时,函数将立即执行,您的目的将失败。要让解释器跳过该语句,我们需要在此处加引号。
2.设置超时(函数(){FUNC_NAME()},时间单位为毫秒);
这里创建了一个匿名函数,它告诉解释器在一定时间后执行if,而不是计算时间 谢谢
shaILU首先删除括号:
setTimeout(testfunction, 2000);
然后,如果要在setTimeout
函数中传递参数,可以通过以下方式传递:
setTimeout(testfunction, 2000, param1, param2);
注意:您可以根据您的函数要求传递多个参数。删除括号,当前您正在立即调用函数。当前传递给setTimeout的是testfunction()的返回值调用,但作为第一个参数应该传递给setTimeout的是函数引用
好的,谢谢..但是有没有一种方法可以向setTimeout(testFunction(obj),2000)这样的函数发送参数?!顺便说一句,这不会太有效setTimeout(alert(“test”),2000)..@Adler是的,您可以在delay参数之后传递所有参数,如下所示:
setTimeout(testFunction,2000,obj)
()
在这里充当调用运算符。但是您想将函数传递到setTimeout
,而不是调用它。Dup of,好的,谢谢..但是有没有一种方法可以将参数发送到setTimeout(testFunction(obj),2000)之类的函数?!顺便说一句,这不会太有效setTimeout(alert(“test”),2000)@Adler:是:setTimeout(function(){alert(“test”)},2000);
@Adler:可以执行设置超时(alert,2000,“test”)
,但IE不支持它。@Adler:另请参阅:
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);