ある参照型が別の参照型に割り当てられている場合、これらは同じアドレスを指しているだけで、演算は相互に影響します。 ディープコピーは、以前のオブジェクトまたは配列が影響を受けないようにスペースを再割り当てします。 浅いコピーは参照型の割り当てと同等です。
jquery のソースコードを見ましたが、ディープコピーには再帰が必要です。 しかし、それが相互影響とどのような関係があるのか、それとも上記の概念についての私の理解が間違っているのか理解できません。
学习是最好的投资!
浅いコピー
オブジェクトの最上位キーのみを走査して (対応する参照に) 再割り当てします。例:
ディープコピー
リーリー
これは単なる名前の重複であり、ディープコピー/シャローコピーとは何の関係もありません。これは、再帰的コピーと呼ぶ方が適切です。
浅いコピー
オブジェクトの最上位キーのみを走査して (対応する参照に) 再割り当てします。例:
リーリー リーリー このプロセスでは、すべてのトップレベル要素が b から取り出されます。つまり、b. a に残り、次に a.x === b.x、a.y === b.y、a.z === b.z です。これらはすべて、同じオブジェクト。参照なので a.x.name = 'x3' のように a.x を操作すると b.x.name も 'x3' になります。ディープコピー
ディープコピーは、参照ではなく再割り当てのためにオブジェクト要素の最後のレイヤーに深く入ります。上記の a と b を例として、次を実行します:リーリー
b の内部を深く探索し、各ノードの値を a に対応するノード (まったく同じ) と比較し、それらが異なる場合は、a のストレージ領域を開き、a が存在しない場合はそれに値を割り当てます。 、このノードは作成後に値を割り当てます。 a の第 1 レベルの子ノードと b の第 1 レベルの子ノードの間には等価性がなく、== さえ成立しません。リーリー
あなたが得るもの:リーリー
b の最初のプリミティブが a の最初の要素にマージされます。このマージは、配列が要素のインデックス番号をキーとして動作するためです。したがって、extend を使用して配列をマージすることはできませんが、merge または concat の使用を検討する必要があります。これは単なる名前の重複であり、ディープコピー/シャローコピーとは何の関係もありません。これは、再帰的コピーと呼ぶ方が適切です。