Javascript 为什么Firefox setInterval回调参数与其他浏览器不同?

Javascript 为什么Firefox setInterval回调参数与其他浏览器不同?,javascript,firefox,setinterval,Javascript,Firefox,Setinterval,我在Win7的每个浏览器中测试了这个脚本。它不仅仅适用于Firefox(3.6.13版) 除了返回随机数的Firefox之外,警报框在所有浏览器中都返回“未定义”。这是剧本 function nextSlide(nav){ alert(nav); } jQuery(function(){ var set = setInterval(nextSlide, 2000); }); 这是一个额外的参数是回调延迟的毫秒数。从: 回调参数 setInterval()将回调调用到回调函数

我在Win7的每个浏览器中测试了这个脚本。它不仅仅适用于Firefox(3.6.13版)

除了返回随机数的Firefox之外,警报框在所有浏览器中都返回“未定义”。这是剧本

function nextSlide(nav){
    alert(nav);
}

jQuery(function(){
    var set = setInterval(nextSlide, 2000); 
});

这是一个

额外的参数是回调延迟的毫秒数。从:

回调参数 setInterval()将回调调用到回调函数中的延迟毫秒数传递给回调函数,如果回调函数需要其他参数,则可能会混淆回调函数。要避免这个问题,请使用匿名函数调用回调函数

解决办法是改为写以下内容:

var set = setInterval(function() { nextSlide(); }, 2000);

MarkByers在Mozilla文档中的解释是正确的

但是,这是一个Firefox扩展。这个——至少在HTML5工作草案中是这样——实际上有一个不同的要求。当然,因为这是一个易变域

句柄=窗口。setInterval(处理程序[,超时[,参数]])

计划每超时毫秒运行一次处理程序的超时。任何参数都直接传递给处理程序

因此,Firefox可以被视为违反了这一点,即
参数。长度
为1,即使传递了“无参数”

我相信对于HTML4来说,它只是一个没有定义任何“官方标准”的实际实现——或者至少我所知道的没有——在这种情况下,Firefox可以随心所欲地做任何事情。我很乐意提供更正/参考

编辑:

Firefox确实支持参数传递,正如Neil和
arguments所指出的那样。length
总是比传递的参数数量多一个,以解释“偏移量”数据——在
参数上没有任何魔力。length
(这本身就非常可怕)


记住这一点很重要:在计时器回调或面对浏览器差异时,不要使用和/或小心使用
参数.length
。(这与其他事件回调是内联的)。

Firefox也支持这一点。额外的lateness参数只是被附加到额外参数的列表中。哇!这是随机生成的gravatar吗?如果函数需要参数,则应根据下面的答案将其作为附加参数传递给setInterval。