繁体   English   中英

在循环中使用Array.prototype.forEach很好吗?

[英]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实现进行测试;

  • 在IE 10中,Chrome 33和FF 23表现出同等的性能
  • FF 27支持“新”功能案例
  • Safari 5破坏了数字, 在“新”情况下运行速度变慢

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM