我看到一些代码here具有这些变量声明:
var equestAnimationFrame = 'equestAnimationFrame',
requestAnimationFrame = 'r' + equestAnimationFrame,
ancelAnimationFrame = 'ancelAnimationFrame',
cancelAnimationFrame = 'c' + ancelAnimationFrame
根据页面上的评论,这是为了改善缩小,但我无法弄清楚如何。有人能告诉我吗?感谢。
答案 0 :(得分:22)
不能正确改善缩小 - 有问题的代码是requestAnimationFrame
polyfill。这意味着它将尝试不同的供应商前缀。因此,有时代码将是"requestAnimationFrame"
(小写r
),有时会使用供应商前缀,例如msRequestAnimationFrame
。
因此,它是动态构建的,"equestAnimationFrame"
始终存在,但可能会以"r"
或"R"
为前缀。
"改善缩小"部分是因为而不是写作:
var requestAnimationFrame = window.requestAnimationFrame ||
window.msRequestAnimationFrame ||
window.mozRequestAnimationFrame ||
window.webkitRequestAnimationFrame ||
window.oRequestAnimationFrame ||
他们在["ms","moz","o", "webkit"]
上运行for循环并尝试前缀。这最多可以节省几个字节。
以下是我认为更清晰并且做同样事情的代码:
var base = "equestAnimationFrame" // the base string
var alternatives = window["r"+base] || // try the basic option first
['moz', 'ms', 'o', 'webkit'].map(function(x){
return x+"R" + base; // all the options
}).filter(function(x){ // check if in window
return x in window;
})[0];