在每个AnimationFrame上调用的函数内声明一个函数,性能和效率是否正常? A)和B)一样好吗?
A)
function update() {
function do () { ...}
}
B)
function update() {
do();
}
function do () { ...}
答案 0 :(得分:2)
不,这不是一个好主意,因为你一遍又一遍地重新声明同一个功能。
更好的模式是:
(function() { // this is your closure
var genericVariableOne = 123,
genericVariableTwo = 456;
function genericFunctionOne() {...}
// now do stuff here
})();
这样,您只需在闭包内声明一次函数。对于变量,根据它们的使用方式,在外面声明它们可能是也可能不是一个好主意。
答案 1 :(得分:1)
是的 - 可以在函数内声明函数,并且在许多情况下实际上是可取的。它们被称为closures。所有主要的JavaScript API都依赖于这个概念,从jQuery到AngularJS再到Dojo。较旧版本的MSIE不鼓励使用它,但所有现代浏览器都使用非常高效的JavaScript引擎,并且可以通过闭包提供良好的性能。