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 に答える