Javascript Jquery setTimeout不考虑计时

Javascript Jquery setTimeout不考虑计时,javascript,jquery,Javascript,Jquery,我不止一次使用setTimeout,除了这次,我从未发现任何问题。 在本例中,setTimeout再次调用我的方法,但不是在延迟3000(或其他)之后,而是立即调用,我不明白为什么。。(在refreshPhalanx函数中) 代码如下: (我曾经在3000和3500毫秒之间创建一个随机延迟,并将其存储在var“msec”中,但在我使用3000之后,为了测试它,以防错误出现在延迟的构造中,但仍然没有结果。) var n=1; 方阵功能(id){ console.debug(id); //$('.

我不止一次使用setTimeout,除了这次,我从未发现任何问题。 在本例中,setTimeout再次调用我的方法,但不是在延迟3000(或其他)之后,而是立即调用,我不明白为什么。。(在refreshPhalanx函数中) 代码如下: (我曾经在3000和3500毫秒之间创建一个随机延迟,并将其存储在var“msec”中,但在我使用3000之后,为了测试它,以防错误出现在延迟的构造中,但仍然没有结果。)

var n=1;
方阵功能(id){
console.debug(id);
//$('.refreshPhalanxLink')。单击();
如果($('#'+id).length){
调试('仍在运行'+n++);
var msec=数学地板((数学随机()/2+3)*1000)
控制台调试(毫秒);
setTimeout(refreshPhalanx(id),3000);//我以前用过毫秒,但我用3000来测试它是否只是毫秒计算中的一个错误,或者setTimeout方法有问题。
}
其他的
警报('Alle ore'+新日期($.now())+'la missione risulta ritirata');
}
函数延迟(){
if($('.phalanx').length){
console.debug('appending');
$('.eventFleet')。每个(函数(){
$(this.append('calcola rientro');
})
console.debug('appending');
$('.buttons')。单击(函数(){
调试('click-->'+$(this.attr('currentEvent'));
refreshPhalanx($(this.attr('currentevent'));
})
console.debug('appending');
}
否则{
设置超时(延迟,2000);
console.debug(“延迟”);
}
}
延迟()表达式

setTimeout(refreshPhalanx(id), 3000);
方法:调用函数
refreshPhalanx(id)
,并将返回值设置为
setTimeout
的第一个参数

setTimeout的概要是
函数setTimeout(callback,毫秒)
,其中callback是一个可调用函数或带有函数名的字符串

将代码更改为

 setTimeout(function () {
       refreshPhalanx(id);
 }, 3000);

您需要将
函数
作为第一个参数传递给
setTimeout
。但是,使用
refreshPhalanx(id)
传递的不是函数,而是该函数的返回值,在您的情况下,该函数是
未定义的

要传递带有参数的函数,只需包装函数:

setTimeout(function(){
  refreshPhalanx(id)
},3000);
最有可能的情况是

setTimeout(delay, 2000);

工作正常,因为您只是传递了函数名,而没有使用
()

执行它。请尝试将调用嵌套在
setTimeout()中的匿名函数中,如下所示:

setTimeout(function(){
    refreshPhalanx(id);
}, 3000);


setTimeout(刷新方阵(id),3000)
包含函数调用,而不是对函数的引用。您认为refreshPhalanx(id)
的作用是什么?答:它调用函数。立即它的返回值传递给
setTimeout
setTimeout
的不是jQuery,而是普通的dom0。查看delay的调用正在工作,因为它不是
delay()
,而是
delay
。是的,我看到了。。过去我使用这个方法时,我的函数没有任何参数,而我只输入字符串,这让我很困惑。。谢谢
setTimeout(function(){
    delay();
}, 2000);