[英]How might I be able to use Array.prototype.forEach on an object?
[英]Is it fine to use Array.prototype.forEach in a loop?
JSHint向我抱怨,因为我正在使用for(o in ...)
遍历一个对象,然后使用o.somearray.forEach(function(){...});
内。 就是说不要在循环内创建函数,但是在这种情况下,它甚至有关系吗? 由于行数更少,并且看起来(略)好一些,因此它看起来更好一些,但是它有什么主要含义吗?
使用常规的for循环并像这样遍历数组是否更好,还是创建函数并使用ECMA 5版本更好?
我正在做这样的事情:
for(var i in data) {
data[i].arr.forEach(function(...) {
// do magic
});
}
可以使用forEach
,这在这里暗示了要传递给forEach
的函数应该在循环外部创建,如下所示:
var doMagic = function(...) {
// do magic
};
for (var i in data) {
data[i].arr.forEach(doMagic);
}
不鼓励在循环内创建函数,因为效率低下,JavaScript解释器将在每次循环迭代时创建函数实例。 JSLint错误说明中提供了更多详细信息:不要在循环内创建函数 。
是的,嵌套结构很好。 在每个循环中创建一个“新”函数也可以。 和,
在同一执行上下文中创建许多“新”功能时,性能差异是实现细节; 但这并不是天生的慢。 (请参阅此jsperf测试案例 1 )
即使在“新”情况下将创建一个新的功能对象,每个循环也会创建相同数量的执行上下文,即当前执行上下文和调用函数的时间。 更聪明的JavaScript实现可以轻松利用这一点。 否则他们可能不会。
在这种特殊情况下,我更喜欢内联方法。
1当然要对特定的 JavaScript实现进行测试;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.