Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/376.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-For循环与forEach_Javascript_Foreach_Ecmascript 6 - Fatal编程技术网

JavaScript-For循环与forEach

JavaScript-For循环与forEach,javascript,foreach,ecmascript-6,Javascript,Foreach,Ecmascript 6,有人能解释一下这两段代码是如何实现完全相同的功能的吗?或者解释一下为什么它们看起来是,但实际上不是 for (i = 0; i < xx.length; i++) { xx[i].classList.remove(...y); } xx.forEach(x => {    x.classList.remove(...y); }); 小心,如果您声明i而不使用var关键字,它将是全局的 您可以在此处查看forEach的功能: 是原型上的一种方法。它遍历数组

有人能解释一下这两段代码是如何实现完全相同的功能的吗?或者解释一下为什么它们看起来是,但实际上不是

  for (i = 0; i < xx.length; i++) {
    xx[i].classList.remove(...y);
  }

  xx.forEach(x => {
    x.classList.remove(...y);
  });

小心,如果您声明i而不使用var关键字,它将是全局的

您可以在此处查看forEach的功能: 是原型上的一种方法。它遍历数组的每个元素,并将其传递给回调函数

所以基本上,是用例的简写方法,将数组的每个元素传递给函数。下面是一个我认为与for循环相比非常有用的常见示例:

如您所见,与for循环相比,forEach语句的可读性有所提高


另一方面,for语句更灵活:它不一定涉及数组。普通for循环的性能稍好一些,因为所涉及的每个元素都没有函数调用。尽管如此,当for循环可以作为forEach语句编写时,建议避免使用for循环。

第二个循环主要是语法sugar afaik,可能会有很小的性能差异。explained,explained.forEach仅适用于数组。它将比计数循环稍微慢一点,但值得在这方面进行权衡。forEach消除了管理索引的需要。我认为您的第一个循环可能比xx{I.classList.remove…y;}的const I更好。这不是答案。这应该是一个评论。非常好,但不能在50个代表下添加评论:这不是发布错误答案的理由,也不会帮助您达到50个代表。发布好的答案将提高您的代表性。谢谢,但在我的代码中,我使用“let”在for循环上方声明“I”。
// shortcut for document.querySelectorAll
function $$(expr, con) {
    return Array.prototype.slice.call((con || document).querySelectorAll(expr));
}

// hide an element
function hide(el) {
    el.style.display = 'none';
}

// hide all divs via forEach
$$('div').forEach(hide); 

// hide all divs via for
for (var divs = $$('div'), i = 0; i < divs.length; i++) {
    hide(divs[i])
}