-1

次のコードの最後で がb 等しくないのはなぜですか?null

var a = { property: "value" }, 
    b = a;
console.log(a === b); // true

a = null;
console.log(b); // Object { property: "value" }

abは 1 つのオブジェクトに関連付けられた 2 つの参照であるため、両方とも になると思いましたnull

4

1 に答える 1

0

行で:

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、参照は独立していますが、どちらもたまたま同じメモリ ブロックを指しています。

于 2016-07-15T16:11:55.443 に答える