Javascript 请解释一下这个requestAnimationFrame习惯用法

Javascript 请解释一下这个requestAnimationFrame习惯用法,javascript,html,Javascript,Html,有很多地方(例如)修复了窗口。requestAnimationFrame如下。我不明白为什么赋值的右侧被包装在函数调用中 window.requestAnimFrame=(函数(){ return window.requestAnimationFrame|| window.webkitRequestAnimationFrame|| window.mozRequestAnimationFrame|| window.oRequestAnimationFrame|| window.msRequest

有很多地方(例如)修复了
窗口。requestAnimationFrame
如下。我不明白为什么赋值的右侧被包装在函数调用中


window.requestAnimFrame=(函数(){
return window.requestAnimationFrame||
window.webkitRequestAnimationFrame||
window.mozRequestAnimationFrame||
window.oRequestAnimationFrame||
window.msRequestAnimationFrame||
函数(回调){
设置超时(回调,1000/60);
};
})();

我以前也在想同样的事情。我很确定谷歌真的很喜欢闭包。假设其中没有一个变量,那么这样做是“安全的”

就我所知,这是完全相同的事情,没有任何干扰名称空间的变化(使用这样的闭包的一般原因):


requestAnimationFrame
接受一个参数:要运行的函数。但是,
setTimeout
会让函数运行,并在运行之后延迟一段时间。因此,虽然您可以直接分配各个函数,但必须为
setTimeout
创建一个闭包,以便分配第二个参数


它基本上是一种形式。

在OP示例中,将代码放入闭包没有任何作用(至少我知道:-)

在这里寻找一个类似的函数,它对局部变量执行相同的操作。在这种情况下,如果变量不在闭包内,它将以全局结束

因此,其中涉及两件事:

  • 一个嵌入变量的函数,这样它们就不会成为全局变量
  • 立即执行此函数以运行代码
下面是关于这些立即函数的另一个讨论


最好的是,nobi

这是真的,除了setTimeout已经包装在它自己的函数中。所有可能的返回都可以处理相同的参数结构。我指的是外部函数。不需要争论的人。是的,包裹setInterval的内部是用来咖喱setInterval的。我刚刚想到了这一点。最初写这篇文章的人使用了某种翻译,比如coffeescript,这就产生了这句话。你看到了吗?我不太明白,但你可以。。 window.requestAnimFrame = (function(){ return window.requestAnimationFrame || window.webkitRequestAnimationFrame || window.mozRequestAnimationFrame || window.oRequestAnimationFrame || window.msRequestAnimationFrame || function(callback){ window.setTimeout(callback, 1000 / 60); }; })();
window.requestAnimFrame = 
    window.requestAnimationFrame ||
    window.webkitRequestAnimationFrame ||
    window.mozRequestAnimationFrame ||
    window.oRequestAnimationFrame ||
    window.msRequestAnimationFrame ||
    function(callback){
        window.setTimeout(callback, 1000 / 60);
    };