在MDN 的 setTimer 页面上,有一个小的 shim / 兼容层 setTimer 可以让 Internet Explorer 接受 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;
}
除了一行:
var aArgs = Array.prototype.slice.call(arguments, 2);
它引用arguments
了 ,但我看不到该名称在此行之前的任何地方被引用。它也不在保留字列表中,所以它似乎没有任何魔法。为了让我理解它,它必须以某种方式引用被覆盖的 setTimeout 函数的参数,然后用于slice()
获取前两个参数之后的每个参数。