Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Параменты по ссылке (https://javascript.ru/forum/misc/21137-paramenty-po-ssylke.html)

kalabro 30.08.2011 12:34

Параменты по ссылке
 
* Параметры по ссылке

Добрый день. Не знаю, как вещи, с которыми я столкнулась, назваются по-научному, поэтому привожу код:

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().
Ссылки на гугл и теорию тоже подойдут :)

B@rmaley.e><e 30.08.2011 12:39

В JS всё и везде передается по значению. Объекты, в свою очередь, никогда не хранятся в переменных, в переменных всегда хранятся только ссылки на них. И вот эти ссылки передаются по значению.

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

Изменить это положение нельзя.

dmitriymar 30.08.2011 12:40

посмотрите как объекты предаются и всё поймёте почему так.


Часовой пояс GMT +3, время: 14:09.