Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/402.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在循环中使用Array.prototype.forEach可以吗?_Javascript_Foreach_Jshint - Fatal编程技术网

Javascript 在循环中使用Array.prototype.forEach可以吗?

Javascript 在循环中使用Array.prototype.forEach可以吗?,javascript,foreach,jshint,Javascript,Foreach,Jshint,JSHint在抱怨我,因为我使用for(oin…)在对象上循环,然后使用o.somearray.forEach(function(){…})内部。它说的是不要在循环中创建函数,但在这种情况下,这有关系吗?它看起来更好一些,因为线条更少,看起来(稍微)更好,但是它有什么重要的意义吗 使用普通for循环并像那样迭代数组更好吗,或者创建一个函数并使用ECMA5版本更好吗 我在做这样的事情: for(var i in data) { data[i].arr.forEach(function(...

JSHint在抱怨我,因为我使用
for(oin…
)在对象上循环,然后使用
o.somearray.forEach(function(){…})内部。它说的是不要在循环中创建函数,但在这种情况下,这有关系吗?它看起来更好一些,因为线条更少,看起来(稍微)更好,但是它有什么重要的意义吗

使用普通for循环并像那样迭代数组更好吗,或者创建一个函数并使用ECMA5版本更好吗

我在做这样的事情:

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解释器将在每次循环迭代中创建函数的实例。更多详细信息请参见。

使用
forEach
是可以的,这里建议您传递给
forEach
的函数应该在循环之外创建,如下所示:

var doMagic = function(...) {
    // do magic
};
for (var i in data) {
    data[i].arr.forEach(doMagic);
}

不鼓励在循环中创建函数,因为这样效率很低,JavaScript解释器将在每次循环迭代中创建函数的实例。中提供了其他详细信息。

是的,可以嵌套构造。也可以在每个循环中创建一个“新”函数。以及

在同一执行上下文中创建多个“新”函数时的性能差异是一个实现细节;但它本身并不慢。(参见本1)

即使在“新”情况下会创建一个新的函数对象,每个循环也会创建相同数量的执行上下文,即当前执行上下文和调用函数的时间。更智能的JavaScript实现可以轻松地利用这一点;或者他们可能不会

在这种特殊情况下,我更喜欢内联方法


1当然,测试特定的JavaScript实现

  • 在IE 10中,Chrome 33和FF 23表现出同等的性能
  • FF 27支持“新”功能案例
  • Safari 5在“新”的情况下会对数字进行错误处理并运行较慢

是的,可以嵌套构造。也可以在每个循环中创建一个“新”函数。以及

在同一执行上下文中创建多个“新”函数时的性能差异是一个实现细节;但它本身并不慢。(参见本1)

即使在“新”情况下会创建一个新的函数对象,每个循环也会创建相同数量的执行上下文,即当前执行上下文和调用函数的时间。更智能的JavaScript实现可以轻松地利用这一点;或者他们可能不会

在这种特殊情况下,我更喜欢内联方法


1当然,测试特定的JavaScript实现

  • 在IE 10中,Chrome 33和FF 23表现出同等的性能
  • FF 27支持“新”功能案例
  • Safari 5在“新”的情况下会对数字进行错误处理并运行较慢

你能展示这段代码吗?你能展示这段代码吗?你能为“低效”提供一个基准吗?虽然它必须是一个新的函数对象,但如果它没有得到很好的优化,我会感到惊讶;例如,整个函数体可以共享,它不会创建更多的执行上下文。此外,不确定您的版本有什么不同。它比我的版本做得更多。正如这个问题所示,我的版本只在相同的执行上下文中创建“新”函数。我认为测试的其他版本也有相同的执行上下文,我认为这可能归结于浏览器的智能程度,以及命名函数和未命名函数之间的差异。它们不能/不具有相同的执行上下文。因为具有新执行上下文的新函数会创建“新”函数。这将更慢(虽然可能不会太慢),因为在这种情况下,必须创建新的执行上下文。(尽管与第一个链接相比,这个论点不那么有力。)你能为“低效”提供一个基准吗?虽然它必须是一个新的函数对象,但如果它没有得到很好的优化,我会感到惊讶;例如,整个函数体可以共享,它不会创建更多的执行上下文。此外,不确定您的版本有什么不同。它比我的版本做得更多。正如这个问题所示,我的版本只在相同的执行上下文中创建“新”函数。我认为测试的其他版本也有相同的执行上下文,我认为这可能归结于浏览器的智能程度,以及命名函数和未命名函数之间的差异。它们不能/不具有相同的执行上下文。因为具有新执行上下文的新函数会创建“新”函数。这将更慢(虽然可能不会太慢),因为在这种情况下,必须创建新的执行上下文。(尽管与第一个链接相比,这个论点不那么有力。)