这是一个例子
arr1 = [{ b: 2 }, { a: 1 }] // an array with 2 elements
arr1.forEach(function (element, index, array) {
console.log(element);
console.log('of');
console.log(array);
console.log('');
arr1.push({ c: 3 });
});
console.log(arr1);
结果
{ b: 2 }
of
[ { b: 2 }, { a: 1 } ]
{ a: 1 }
of
[ { b: 2 }, { a: 1 }, { c: 3 } ]
[ { b: 2 }, { a: 1 }, { c: 3 }, { c: 3 } ]
在上面的示例中,我遍历一个数组并向其中添加更多值,并且在循环时将它们添加到原始数组中
forEach
是否使用不同的数组来循环?
答案 0 :(得分:3)
正如您所看到的,它不会使用不同的数组,即使您将console.log(array);
推送到arr1
,当您array
时,仍会看到新元素。
所以我们知道arr1
和forEach
指向相同的数组。
然而,根据polyfill on MDN,至少forEach
所做的是:
在迭代之前,它将提取数组的长度,然后才开始迭代。因此,如果数组的长度在传递给// 2. Let lenValue be the result of calling the Get() internal
// method of O with the argument "length".
// 3. Let len be toUint32(lenValue).
var len = O.length >>> 0;
// 6. Let k be 0
k = 0;
// 7. Repeat, while k < len
while (k < len) {
...
}
的函数内部发生变化,则迭代不会改变。
{{1}}
答案 1 :(得分:2)
它不会创建任何数组副本。 对原始数组的引用将传递给forEach函数的数组参数。 请点击以下链接。 http://jkoder.com/foreach-method-in-arrays-functional-programming-in-javascript-part-3/