Actionscript 3 在AS3中,将匿名函数放在方法中是一个坏主意吗?

Actionscript 3 在AS3中,将匿名函数放在方法中是一个坏主意吗?,actionscript-3,memory-management,iterator,closures,anonymous-function,Actionscript 3,Memory Management,Iterator,Closures,Anonymous Function,最近我决定在一些迭代器上使用所有jQuery*,例如: // forEach being a built-in method of myList that iterates over its members. myList.forEach(function(i:ListItem):void { // Do something with i. }); 然而,由于这段代码中的一些代码在每一帧都被调用,所以在分析时我发现了很多闭包分配。出于性能原因,我希望最小化GC,但我假设唯一的方法是使用

最近我决定在一些迭代器上使用所有jQuery*,例如:

// forEach being a built-in method of myList that iterates over its members.
myList.forEach(function(i:ListItem):void {
    // Do something with i.
});
然而,由于这段代码中的一些代码在每一帧都被调用,所以在分析时我发现了很多闭包分配。出于性能原因,我希望最小化GC,但我假设唯一的方法是使用命名函数而不是匿名函数?如果我必须,那么我必须这样做,但这感觉很笨拙,很难理解,特别是因为这些方法中的一些方法最终都有嵌套迭代器,即
myList
的成员本身就是类似数组的对象,我也需要迭代它们的成员。我真的要做下面这样的事情吗

function enterFrame(e:Event):void {
    myList.forEach(iterator1);
}

function iterator1(i:ListItem):void {
    i:forEach(iterator2);
}

function iterator2(j:ListItemItem):void {
    // Do stuff with j.
}
*编辑:让我澄清一下。我使用的是ActionScript3,不是Javascript。我指的是,我的代码结构是受我使用jQuery的经验启发的,jQuery在其文档中积极鼓励使用匿名函数作为回调函数,如经典的
$(document).ready(function(){})

关于文字/匿名函数(他们称之为函数表达式)。如果您知道自己在做什么,关于垃圾收集和性能,IMO应该不会有问题

在您的特定情况下,您将在每次调用<代码>前述()/CUT>时创建一个新对象,并且在列表/子列表中的每个元素中都有一个新的函数调用(匿名或不匿名)。


还考虑使用AS3的动态特性(例如:非类型化VARS,动态类,如<代码>对象< /代码>,匿名函数等)将影响性能。当然,这些事情在小项目中并不明显,它是一种严格类型化的AS3类语言,也可以编译为SWF,性能要好得多,因为它删除了大多数动态特性(不是全部)。

我使用的是Nape Physical库,我认为它为其forEach()方法创建了一个可重用的迭代器对象。不过,你的其他观点也被采纳了。我可能只需要看看是否有任何东西会造成性能问题。我正试图尽量减少潜在的内存/GC减速问题,因为我最终将部署到移动设备上,我正在制作一个非常复杂的游戏,并将进一步的内存分配留待添加。