0

有人可以解释为什么 Eg1 在 FF 中工作但在 IE 中不工作,以及 Eg2 如何在 FF 和 IE 中工作?

例1

// ----- works in FF, not in IE   
var msg = "Hello World";
setTimeout(doAlert, 1, msg);
function doAlert(msg)
{
    alert(msg);
}

例2

// ------ works in both IE, FF
var msg = "Hello World";
setTimeout(function() {doAlert(msg);}, 1);
function doAlert(msg)
{
    alert(msg);
}
4

1 回答 1

0

因为回调参数不是默认的。

要在 IE 上启用额外参数,请使用以下代码段:

    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;
    }

  if (document.all && !window.setInterval.isPolyfill)
    {
      var __nativeSI__ = window.setInterval;
      window.setInterval = function (vCallback, nDelay /*, argumentToPass1, argumentToPass2, etc. */)
        {
          var aArgs = Array.prototype.slice.call(arguments, 2);
          return __nativeSI__(vCallback instanceof Function ? function ()
                                                                {
                                                                      vCallback.apply(null, aArgs);
                                                                } :
                                                              vCallback, nDelay
                             );
        };
      window.setInterval.isPolyfill = true;
    }

来源:https ://developer.mozilla.org/en-US/docs/DOM/window.setTimeout

于 2013-01-09T19:45:46.127 回答