1

为什么我们要费心创建一个匿名函数块,它会立即被评估,如下所示(我看到的一个常见的 JS 习语)?

window.requestAnimFrame = (function(){
  return  window.requestAnimationFrame       || 
          window.webkitRequestAnimationFrame || 
          window.mozRequestAnimationFrame    || 
          window.oRequestAnimationFrame      || 
          window.msRequestAnimationFrame     || 
          function(/* function */ callback, /* DOMElement */ element){
            window.setTimeout(callback, 1000 / 60);
          };
})();

相反,为什么不使用如下更直接的路线?

window.requestAnimFrame = 
          window.requestAnimationFrame       || 
          window.webkitRequestAnimationFrame || 
          window.mozRequestAnimationFrame    || 
          window.oRequestAnimationFrame      || 
          window.msRequestAnimationFrame     || 
          function(/* function */ callback, /* DOMElement */ element){
            window.setTimeout(callback, 1000 / 60);
          };
4

1 回答 1

2

上面的代码没有任何理由,因为匿名函数中没有任何局部变量。虽然使用它来缩短您的代码可能是合理的,但绝对不是必需的。例如:

window.requestAnimFrame = (function(w){
  return  w.requestAnimationFrame       || 
          w.webkitRequestAnimationFrame || 
          w.mozRequestAnimationFrame    || 
          w.oRequestAnimationFrame      || 
          w.msRequestAnimationFrame     || 
          function(/* function */ callback, /* DOMElement */ element){
             w.setTimeout(callback, 1000 / 60);
          };
})(window);
于 2013-08-09T16:41:11.443 回答