Параменты по ссылке
* Параметры по ссылке
Добрый день. Не знаю, как вещи, с которыми я столкнулась, назваются по-научному, поэтому привожу код: function editObject1(o) { o['new_key'] = 'new_val'; // Работает нормально } function editObject2(o) { o = {}; // Похоже, что создает новый локальный объект } var foo = { 'a': 'b' }; editObject1(foo); // -> { 'a': 'b', 'new_key': 'new_val' } editObject2(foo); // -> { 'a': 'b' } Было бы интересно узнать, что происходит в функции editObject2(). Ссылки на гугл и теорию тоже подойдут :) |
В JS всё и везде передается по значению. Объекты, в свою очередь, никогда не хранятся в переменных, в переменных всегда хранятся только ссылки на них. И вот эти ссылки передаются по значению.
Таким образом, в editObject1 Вы изменяете свойство объекта, на которое ссылается локальная переменная o (и эта ссылка совпадает с foo), а в editObject2 Вы изменяете саму переменную o, т.е. она теперь ссылается на совсем другой объект, никак не связанный с foo. Изменить это положение нельзя. |
посмотрите как объекты предаются и всё поймёте почему так.
|
Часовой пояс GMT +3, время: 11:28. |