私が何を尋ねようとしているのかを理解するために、以下のコード内のコメントを読んでください。
期待される出力:JavaScript の参照渡しメカニズムによれば、は で初期化されているため、最後にobjOne
ログに記録されることが予想されます。{}
objTwo
{}
var objOne = {
x: 1,
y: 2
};
var objTwo = objOne;
// change the x vlaue to 2 by objTwo
objTwo.x = 2;
// Change the value of key x in objOne as well - pass by reference mechanism
console.log(objOne); // { x: 2, y: 2 }
/*** Pass by reference is understood in code, above this comment ***/
// Now what if objTwo initialized with empty object
objTwo = {};
console.log(objOne); // { x: 2, y: 2 } but expected output = {}
// As per pass by reference mechanism. objOne is expected to log {}, because objTwo was initialized with {}.
ベストアンサー1
ある変数を別の変数に割り当てる場合、両方の変数が参照によってリンクされるわけではありません。ここでは、「参照渡し」の意味を誤解しています。
オブジェクトを保持する変数は「直接」オブジェクトを保持するわけではありません。保持するのはオブジェクトへの参照ある変数から別の変数に参照を割り当てると、その参照のコピーが作成されます。これで、両方の変数がオブジェクトへの参照を保持するようになります。その参照を介してオブジェクトを変更すると、そのオブジェクトへの参照を保持する両方の変数が変更されます。
変数の 1 つに新しい値を割り当てると、その変数が保持する値が変更されます。変数はオブジェクトへの参照を保持しなくなり、代わりに別のものを保持します。もう一方の変数は元のオブジェクトへの参照を保持したままなので、割り当てによる影響はまったくありません。