После записи:
var myObject = {};
В памяти есть объект, на который вы можете ссылаться по имени myObject
.Следующее задание:
var myCopy = myObject;
... говорит, что myCopy
теперь относится к тому же объекту, где бы он ни находился.Это то же самое, что происходит, когда вы передаете аргумент функции:
function somefunc(localName) {
// body
}
someFunc(myCopy);
Теперь есть переменная с именем localName
, которая local to someFunc это также относится к тому же объекту в памяти.
Это фундаментальный способ, которым мы передаем ссылки на объект, чтобы на него можно было ссылаться под разными именами в разных областях.
Мы можем скопировать всю структуру в новое место в памяти.Ничто не мешало дизайнерам создать язык, который бы это делал.Но это менее эффективно - думать о глубоко вложенных объектах - и, как правило, не о том, что вы хотите делать.Например, если функция изменила одно свойство объекта, ей нужно будет вернуть весь объект, чтобы это изменение сохранялось за пределами функции.И вызывающая сторона должна была бы обработать это возвращаемое значение, решая, нужно ли сохранить старый объект или его может перезаписать только что созданная, немного другая копия.
Опять же, в принципе, в этом направлении дизайна нет ничего плохого;это просто не то, как был разработан JavaScript.