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);