Firefox setTimeout(func,ms)向回调发送默认参数

时间:2011-03-21 20:46:52

标签: javascript firefox settimeout

我无法找到有关此默认参数的更多信息,并且希望有人可以指出解释。

在Firefox(本例中为3.6)中,如果您调用以下代码:

function test(someVar) {
   console.log('test ' + someVar);
}
setTimeout(test, 0);

它会将“随机”数字记录到控制台。我知道你可以在Firefox中传递参数:

setTimeout(test, 0, param1, param2);

但好像Firefox会自动发送一个值。我认为这是超过请求的通话时间的ms数,但我无法确定。 (EG:now()+ 0ms == now(),但由于它现在无法调用,它等待执行队列并返回超过该时间的ms数?)如果我将500ms用于超时,它通常会返回0,除非我背后有一个长时间运行的脚本。

我也知道Firefox会将超时请求限制为10ms,输入0会使其默认为10ms。如果这个值是'延迟值'(即:它比我们要求的时间长126ms)是基于我输入的值(0)还是钳位的最小值?


下面的一个答案表明这是计时器句柄。以下代码反驳了(?):

function test(someVar) {
   console.log('test ' + someVar);
}
console.log('Timer ' + setTimeout(test, 0));

这将返回两个不同的值。


当然,它会在IE中返回undefined所以我不会编写期望它的代码,但我很好奇。

(这实际上导致我正在处理的一些代码中的错误依赖于调用函数的可选参数。在IE中工作,而不是FF。)

2 个答案:

答案 0 :(得分:5)

来自MDC

  

Gecko将额外的参数传递给   回调例程,表明   超时的“迟到”   毫秒。

因为“实际”延迟可能比setTimeout调用中指定的延迟更长,如果在指定的延迟之后完全调用函数,则“迟到”将为零,否则为非零。

答案 1 :(得分:2)

您正确认为它是偏移量。它通常为零(意味着它本应该被调用),但如果JS引擎备份,它会更高,甚至可能是负面的。

参考:https://developer.mozilla.org/en/DOM/window.setTimeout

(参见黄色部分)