有很多地方(例如How to use requestAnimationFrame?)修复了window.requestAnimationFrame
,如下所示。我不明白为什么赋值的右侧包含在函数调用中。
window.requestAnimFrame = (function(){
return window.requestAnimationFrame ||
window.webkitRequestAnimationFrame ||
window.mozRequestAnimationFrame ||
window.oRequestAnimationFrame ||
window.msRequestAnimationFrame ||
function(callback){
window.setTimeout(callback, 1000 / 60);
};
})();
答案 0 :(得分:0)
我以前也想过同样的事情。我非常确定谷歌真的很喜欢闭包。当然,那里没有一个变量,它是一个安全的'要做的事。
据我所知,这是完全相同的事情,没有任何干扰命名空间的变化(使用类似闭包的一般原因):
window.requestAnimFrame =
window.requestAnimationFrame ||
window.webkitRequestAnimationFrame ||
window.mozRequestAnimationFrame ||
window.oRequestAnimationFrame ||
window.msRequestAnimationFrame ||
function(callback){
window.setTimeout(callback, 1000 / 60);
};
答案 1 :(得分:0)
在OP示例中,将代码放入闭包中没有任何作用(至少我所知道的是: - )
在这里http://my.opera.com/emoller/blog/2011/12/20/requestanimationframe-for-smart-er-animating查看类似的函数与局部变量做同样的事情。在这种情况下,如果变量不在闭包内,变量将全局结束。
所以涉及到两件事:
此处Immediate functions JavaScript是关于这些即时功能的另一个讨论。
一切顺利,nobi
答案 2 :(得分:-2)
requestAnimationFrame
接受一个参数:要运行的函数。但是setTimeout
运行该函数以及运行它之后的延迟。因此,虽然您可以直接分配单个函数,但您必须为setTimeout
创建一个闭包,以便您可以分配第二个参数。
它基本上是currying的一种形式。