FirefoxのsetTimeoutは関数に余分な引数を与える

正確に書くと、
FirefoxではsetTimeout(及びsetInterval)に関数オブジェクトを指定して呼び出すと、その関数が呼び出されるときにランダム(っぽい)値の引数が一つ余分に渡されてしまう。」
です。

setTimeout( function() { alert( arguments[0] ); }, 1000 );

普通のブラウザならば undefined ですが、Firefoxは数字が表示されます(なにが表示されるかは不定)。また、引数をひとつ指定した場合は、

setTimeout( function() { alert( arguments[1] ); }, 1000, "arg0" );

2番目の引数に数字が設定されます。


Bugzilla登録済みのバグらしいのですが
https://bugzilla.mozilla.org/show_bug.cgi?id=263945
https://bugzilla.mozilla.org/show_bug.cgi?id=10637
statusが VERIFIED WONTFIX なので、直ることはないようですね。Firefox以外のブラウザでは、関数に引数を与える方法がそもそもないので、こんなバグもないようです。


どうでもよさそうなバグですが、例えば引数を省略できるような関数を書いた場合や、引数の数が自由な関数をsetTimeout, setIntervalに渡す場合は注意が必要です(この例をsetTimeoutに渡すわけないけど)。

function plus(){
    var a=0;
    for(var i=0; i<arguments.length; i++) a+=arguments[i];
    return a;
}


対応策は

setTimeout(func, 1000, undefined);    //引数の数が0個か1個の場合
setTimeout(function(){func()}, 1000); //ばからしい…
setTimeout("func()", 1000);           //ださださ

ぐらいでしょうか。