2015-03-31 40 views
0

在每个AnimationFrame上调用的函数内部声明一个函数的性能和效率可以吗? A)与B)一样好吗?JS - 在函数内部声明的函数

A)

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

B)

function update() { 
    do(); 
} 

function do() { ...} 
+2

为什么要在每一帧上声明函数? – tadman 2015-03-31 15:49:38

+0

只是为了关闭,共同属于什么,共享相同的varibales – user1477955 2015-03-31 15:51:50

+0

A和B的行为不一样。 – epascarello 2015-03-31 15:54:43

回答

1

是 - 它是确定声明内部功能和事实上在许多情况下期望的功能。他们被称为closures。所有主要的JavaScript API都依赖于这个概念,从jQuery到AngularJS到Dojo。老版本的MSIE不鼓励使用它,但所有现代浏览器都使用JavaScript引擎,这些引擎非常高效,可以通过关闭为您提供良好的性能。

+0

“好”和高性能在这里是两个完全不同的东西。 – tadman 2015-03-31 15:55:48

+0

闭包在整个闭包过程中阻止整个范围链的垃圾收集。函数绑定或重构是一个更好的解决方案。 – 2015-03-31 15:59:45

2

不,这不是一个好主意,因为你一次又一次地重新声明相同的功能。

一个更好的模式是:

(function() { // this is your closure 
    var genericVariableOne = 123, 
     genericVariableTwo = 456; 
    function genericFunctionOne() {...} 

    // now do stuff here 
})(); 

这样,你只封闭内声明函数一次。对于变量,取决于它们的使用方式,将它们声明为外部可能是也可能不是一个好主意。