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