JS - 在函数内声明的函数

时间:2015-03-31 15:48:08

标签: javascript

在每个AnimationFrame上调用的函数内声明一个函数,性能和效率是否正常? A)和B)一样好吗?

A)

function update() {
    function do () { ...}
}

B)

function update() {
   do();
}

 function do () { ...}

2 个答案:

答案 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引擎,并且可以通过闭包提供良好的性能。