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

And*_*dir 2 javascript firefox settimeout

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

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

function test(someVar) {
   console.log('test ' + someVar);
}
setTimeout(test, 0);
Run Code Online (Sandbox Code Playgroud)

它会将"随机"数字记录到控制台.我知道你可以在Firefox中传递参数,如下所示:

setTimeout(test, 0, param1, param2);
Run Code Online (Sandbox Code Playgroud)

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

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


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

function test(someVar) {
   console.log('test ' + someVar);
}
console.log('Timer ' + setTimeout(test, 0));
Run Code Online (Sandbox Code Playgroud)

这将返回两个不同的值.


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

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

Sat*_*jit 5

来自MDC

Gecko将一个额外的参数传递给回调例程,指示超时的"迟到"(以毫秒为单位).

因为"实际"延迟可能比setTimeout调用中指定的延迟更长,所以如果在指定的延迟之后准确调用函数,则"迟到"将为零,否则为非零.