ここでは一例ですforEachはループする前にディープ・コピーを作成しますか?
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 } ]
私は、配列を横断し、それに複数の値を追加し、
をループしながら、彼らは、元の1で追加取得されていますforEach
はループするために別の配列を使用しますか?
[ECMAScript 2015,22.1.3.10 Array.prototype.forEach(callbackfn)](http://www.ecma-international.org/ecma-262/6.0/#sec-array.prototype.foreach) - >ステップ3と8。訪問する要素の数は 'callbackfn'の最初の呼び出しの前に決定され、その後は更新されません。 – Andreas
' forEach'と他の配列メソッドでは、インデックス変数は変更可能ではなく、メソッドが呼び出される瞬間を条件とします。これは、0から始まり、呼び出された瞬間に配列の長さまで増分します。それは固定されていて、たとえあなたが例外をスローしない限り、前進、遅らせる、途中で中断するようなコールバックで修正しようとしても...できません。さらに、オブジェクトのディープコピーをまったく複製するための標準JS機能はありません。 – Redu