setTimerのMDNのページには、setTimerの小さなシム/互換性レイヤーがあり、InternetExplorerがコールバックに渡されるsetTimerメソッドの追加の引数を受け入れることができます。
私は以下のすべてのコードをほぼ理解しています:
if (document.all && !window.setTimeout.isPolyfill) {
var __nativeST__ = window.setTimeout;
window.setTimeout = function (
vCallback,
nDelay /*,
argumentToPass1,
argumentToPass2, etc. */
) {
var aArgs = Array.prototype.slice.call(arguments, 2);
return __nativeST__(vCallback instanceof Function ? function () {
vCallback.apply(null, aArgs);
} : vCallback, nDelay);
};
window.setTimeout.isPolyfill = true;
}
1行を除く:
var aArgs = Array.prototype.slice.call(arguments, 2);
を参照arguments
していますが、この行の前のどこかでその名前が参照されているのがわかりません。予約語リストにも載っていないので、魔法のようには思えません。私がそれを理解するためには、オーバーライドされたsetTimeout関数の引数を何らかの形で参照しslice()
、最初の2つ以降のすべての引数を取得するために使用する必要があります。