Один и тот же объект не всегда один и тот же?
Зачем b
не равно null
в конце следующего кода?
var a = { property: "value" },
b = a;
console.log(a === b); // true
a = null;
console.log(b); // Object { property: "value" }
я думал так a
а также b
две ссылки привязаны к одному объекту и, следовательно, оба станут null
,
1 ответ
В соответствии:
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
Скорее меняя блок памяти ключом property
указывает на строку со значением "value"
, в целое число со значением 5
,
Это сохраняет a
Ссылка на блок памяти, содержащий объект, который вы изначально создали, на который вы также установите 'b', чтобы указать на следующей строке.
Изменить: выше было ответить на ваш предыдущий вопрос. Если вы установите a
к нулю, он просто удаляет ссылку на исходный объект. Объект не будет собирать мусор, пока что-нибудь (b
в данном случае) еще есть ссылка на него. После создания b
ссылки независимы, но обе они указывают на один и тот же блок памяти.