Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/467.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 为什么使用setTimeout时会立即执行该方法?_Javascript_Settimeout - Fatal编程技术网

Javascript 为什么使用setTimeout时会立即执行该方法?

Javascript 为什么使用setTimeout时会立即执行该方法?,javascript,settimeout,Javascript,Settimeout,我试图用setTimeout编写一个简单的代码,但是setTimeout不会等待它假定的时间,代码会立即执行。我做错了什么 setTimeout(testfunction(), 2000); setTimeout(testfunction, 2000); 您将立即调用该函数并计划其返回值 使用: 注意:没有参数。您正在立即调用函数并计划其返回值 使用: 注意:无括号。删除testfunction名称后的括号: setTimeout(testfunction, 2000); 原因是setTi

我试图用
setTimeout
编写一个简单的代码,但是
setTimeout
不会等待它假定的时间,代码会立即执行。我做错了什么

setTimeout(testfunction(), 2000);
setTimeout(testfunction, 2000);

您将立即调用该函数并计划其返回值

使用:


注意:没有参数。

您正在立即调用函数并计划其返回值

使用:


注意:无括号。

删除testfunction名称后的括号:

setTimeout(testfunction, 2000);

原因是setTimeout的第一个参数应该是函数引用,而不是函数的返回值。在代码中,会立即调用
testfunction
,并将返回值发送到setTimeout。

删除testfunction名称后的括号:

setTimeout(testfunction, 2000);
原因是setTimeout的第一个参数应该是函数引用,而不是函数的返回值。在代码中,会立即调用
testfunction
,并将返回值发送到setTimeout。

删除括号

setTimeout(testfunction(), 2000);
如果要向函数发送参数,可以创建一个匿名函数,然后该函数将调用所需的函数

setTimeout(function() {

    testfunction('hello');

}, 2000);
编辑

有人建议发送一个字符串作为setTimeout的第一个参数。我建议不要遵循这一点,也不要将字符串作为setTimeout-first参数发送,因为将使用eval函数。这是一种不好的做法,如果可能的话应该避免。

删除括号

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

您可能已经得到了答案,但我正在解释原因和解决方案。有两种方法可以在需要的时间后调用函数。

1.设置超时(“函数名()”,时间单位为毫秒)
这里双引号内的FUNC_NAME是您希望在时间(以毫秒为单位)后调用的原始函数。这是因为,如果不加引号,那么在解释java脚本时,函数将立即执行,并且您的目的将失败。要让解释器跳过该语句,我们需要在此处加引号。
2.setTimeout(函数(){FUNC_NAME()},时间单位为毫秒)
这里创建了一个匿名函数,它告诉解释器在一定时间后执行if,而不是计算时间

谢谢
shaILU首先删除括号:

setTimeout(testfunction, 2000);
然后,如果要在
setTimeout
函数中传递参数,可以通过以下方式传递:

 setTimeout(testfunction, 2000, param1, param2);

注意:您可以根据功能要求传递多个参数。

首先删除括号:

setTimeout(testfunction, 2000);
然后,如果要在
setTimeout
函数中传递参数,可以通过以下方式传递:

 setTimeout(testfunction, 2000, param1, param2);

注意:您可以根据您的函数要求传递多个参数。

删除括号,当前您正在立即调用函数。当前传递给setTimeout的是testfunction()调用返回的值,但作为第一个参数,应该传递给setTimeout的是函数引用


删除括号,当前您正在立即调用该函数。当前传递给setTimeout的是testfunction()调用返回的值,但作为第一个参数,应该传递给setTimeout的是函数引用


好的,谢谢。。但是有没有一种方法可以向setTimeout(testFunction(obj),2000)这样的函数发送参数呢??!顺便说一句,这不会太奏效setTimeout(alert(“test”),2000)…@Adler是的,您可以在delay参数之后传递所有参数,如下所示:
setTimeout(testFunction,2000,obj)
ok,谢谢。。但是有没有一种方法可以向setTimeout(testFunction(obj),2000)这样的函数发送参数呢??!顺便说一句,setTimeout(alert(“test”),2000)不会太奏效。@Adler是的,您可以在delay参数之后传递所有参数,如下所示:
setTimeout(testFunction,2000,obj)
()
在这里充当调用运算符。但是您希望将函数传递给
setTimeout
,而不是调用它。Dup of,
()
在这里充当调用运算符。但是您希望将函数传递到
setTimeout
,而不是调用它。Dup of,ok,谢谢。。但是有没有一种方法可以向setTimeout(testFunction(obj),2000)这样的函数发送参数呢??!顺便说一句,这不会太奏效setTimeout(警报(“测试”),2000)…@Adler:Yes:
setTimeout(function(){alert(“测试”);},2000)
@Adler:可以执行
设置超时(警报,2000,“测试”)
,但IE不支持它。@Adler:另请参阅:好的,谢谢。。但是有没有一种方法可以向setTimeout(testFunction(obj),2000)这样的函数发送参数呢??!顺便说一下,设置超时(ale)不会太有效