javascript匿名函数求值习惯用法

javascript匿名函数求值习惯用法,javascript,anonymous-function,Javascript,Anonymous Function,为什么我们要费心创建一个匿名函数块,它会立即被计算, 如下所示(我看到了一个常见的JS习惯用法) 相反,为什么不使用以下更直接的路线 window.requestAnimFrame = window.requestAnimationFrame || window.webkitRequestAnimationFrame || window.mozRequestAnimationFrame ||

为什么我们要费心创建一个匿名函数块,它会立即被计算, 如下所示(我看到了一个常见的JS习惯用法)

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

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

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

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

在这种情况下,这并没有什么区别,但作者可能想在将来的某个时候准备在匿名函数中使用局部变量。无论如何,使用此模式的主要原因是这个特定示例没有使用的作用域。@basilikum--是的,在块中隐藏局部变量是有意义的。这段代码是一个常用的样板文件,我没有看到有人定义新的本地变量——但这一定是它。当然,但我给出的代码似乎是通用样板文件。我决不会偏离它。:)我想以前有人问过这个问题:
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);