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); //ださださ
ぐらいでしょうか。