В JS всё и везде передается по значению. Объекты, в свою очередь, никогда не хранятся в переменных, в переменных всегда хранятся только ссылки на них. И вот эти ссылки передаются по значению.
Таким образом, в editObject1 Вы изменяете свойство объекта, на которое ссылается локальная переменная o (и эта ссылка совпадает с foo), а в editObject2 Вы изменяете саму переменную o, т.е. она теперь ссылается на совсем другой объект, никак не связанный с foo.
Изменить это положение нельзя.
|