次のコードの最後で がb 等しくないのはなぜですか?null
var a = { property: "value" },
b = a;
console.log(a === b); // true
a = null;
console.log(b); // Object { property: "value" }
aとbは 1 つのオブジェクトに関連付けられた 2 つの参照であるため、両方とも になると思いましたnull。
次のコードの最後で がb 等しくないのはなぜですか?null
var a = { property: "value" },
b = a;
console.log(a === b); // true
a = null;
console.log(b); // Object { property: "value" }
aとbは 1 つのオブジェクトに関連付けられた 2 つの参照であるため、両方とも になると思いましたnull。
行で:
a = 5;
'a' は、値 5 の整数を含む新しいメモリ ブロックを指しており、最初に作成したオブジェクトへの以前の参照を上書きしています。代わりにこれを試してください:
var a = { property: "value" },
b = a;
console.log(a === b); // true
a.property = 5;
console.log(b); // Object {property: 5}
このように上書きするのではなく、キーが指すaメモリのブロックを value の文字列から valueの整数に変更します。property"value"5
これaにより、最初に作成したオブジェクトを含むメモリ ブロックへの の参照が保持されます。次の行で 'b' を指すように設定します。
編集:上記は、以前の質問に答えるものでした。null に設定aすると、元のオブジェクトへの参照が削除されるだけです。b何か (この場合) がまだオブジェクトへの参照を持っている間、オブジェクトはガベージ コレクションされません。を作成した後b、参照は独立していますが、どちらもたまたま同じメモリ ブロックを指しています。