我在代码中使用了很多_.each而不是for循环。来自Underscore.js库的_.each函数是否在每次调用时创建一个新的匿名函数?例如
_.each(this.sprites, function(sprite) {
sprite.draw();
this.spriteDraws++
}, this);
Unerscore.js是否在应用程序循环的每一帧上创建一个新的匿名函数?该功能是否需要进行垃圾回收?
我注意到我的应用程序每帧都会创建一个新对象,并且无法将它们根除(一个非升级的锯齿模式 - 在每个帧上,创建相同数量的对象,然后定期进行驻留)。也许这可能是一个原因。
谢谢!
更新: 尽管看起来很愚蠢,但我意识到我是罪魁祸首。在每次调用_.each时,我都会创建一个新的匿名函数并将其传递给Underscore.js。谢谢Bergi确认。我已经测试了代码,它已经创建了更少的对象。
更新的问题: 是否应该预先定义函数并将其放入变量中以供重用?或者,在处理数组时,是否应该使用更传统的for循环?
答案 0 :(得分:0)
没有。它没有
来自:https://github.com/jashkenas/underscore/blob/master/underscore.js
// The cornerstone, an `each` implementation, aka `forEach`.
// Handles raw objects in addition to array-likes. Treats all
// sparse array-likes as if they were dense.
_.each = _.forEach = function(obj, iteratee, context) {
iteratee = optimizeCb(iteratee, context);
var i, length;
if (isArrayLike(obj)) {
for (i = 0, length = obj.length; i < length; i++) {
iteratee(obj[i], i, obj);
}
} else {
var keys = _.keys(obj);
for (i = 0, length = keys.length; i < length; i++) {
iteratee(obj[keys[i]], keys[i], obj);
}
}
return obj;
};