Представьте себе имена переменных (для объектов) как содержащие адреса памяти для этих объектов.В случае 1 objectX.name = 'google';
ищет объект в памяти, на который ссылается objectX
, и изменяет одно из его свойств.В случае 2, когда вы делаете objectY = {};
, переменная, называемая objectY
внутри этой функции, будет ссылаться на вновь созданный пустой объект - но исходный объект, определенный вне функции, никогда не был переназначен, поэтому он по-прежнему указывает нарасположение в оригинальном объекте.
Если вы хотите, чтобы внешний objectY
указывал на новый объект, вам пришлось бы явно вернуть новый объект из функции и переназначить внешнюю переменную:
var objectY = {name: 'stackoverflow'};
function changeEntireObj(objectY) {
objectY = {};
return objectY;
}
objectY = changeEntireObj(objectY);
console.log(objectY);