Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/asp.net-mvc-3/4.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 Firefox setTimeout(func,ms)向回调发送默认参数_Javascript_Firefox_Settimeout - Fatal编程技术网

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

Javascript Firefox setTimeout(func,ms)向回调发送默认参数,javascript,firefox,settimeout,Javascript,Firefox,Settimeout,我无法找到更多关于我遇到的这个默认参数的信息,希望有人能给出解释 在Firefox(本例中为3.6)中,如果调用以下代码: function test(someVar) { console.log('test ' + someVar); } setTimeout(test, 0); 它将向控制台记录一个“随机”数字。我知道你可以像这样在Firefox中传递参数: setTimeout(test, 0, param1, param2); 但Firefox似乎在自动发送一个值。我想是超过要

我无法找到更多关于我遇到的这个默认参数的信息,希望有人能给出解释

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

function test(someVar) {
   console.log('test ' + someVar);
}
setTimeout(test, 0);
它将向控制台记录一个“随机”数字。我知道你可以像这样在Firefox中传递参数:

setTimeout(test, 0, param1, param2);
但Firefox似乎在自动发送一个值。我想是超过要求的通话时间的毫秒数,但我不能确定。(例如:now()+0ms==now(),但由于它现在无法调用,因此它将等待执行队列并返回超过该时间的毫秒数?)如果我将500毫秒作为超时,它通常返回0,除非后面有一个长时间运行的脚本

我还知道Firefox会将超时请求限制为10ms,输入0会使其默认为10ms。如果该值为“延迟值”(即:所用时间比您要求的时间长126ms),则该值是基于我输入的值(0)还是钳制最小值


下面的一个答案表明这是计时器手柄。以下代码证明(?):

这将返回两个不同的值


当然,它会在IE中返回
未定义的
,所以我并没有编写预期的代码,但我很好奇

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

来自MDC

Gecko将一个额外的参数传递给 回调例程,指示 中超时的“延迟” 毫秒


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

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

参考:


(见黄色部分)

投票支持你。谢谢你的链接,但我会投票给Satyajit作为回答者,因为他们是第一个。(对不起!)
function test(someVar) {
   console.log('test ' + someVar);
}
console.log('Timer ' + setTimeout(test, 0));