Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   Вопрос по объекту и присваиванию! (https://javascript.ru/forum/events/69457-vopros-po-obektu-i-prisvaivaniyu.html)

Mess4me 24.06.2017 22:36

Вопрос по объекту и присваиванию!
 
Объясните почему в одном случае присваивание происходит , а в другом нет:

var obj = {
        a: 2
    };

function func(obj){
     obj.a = 3;
}

func(obj);
alert( obj.a );


а при таком нет:
var obj = {
     a: 2
};

function func(obj){
    obj = { a : 3};
}

func(obj);
alert( obj.a );

рони 24.06.2017 23:07

Mess4me,
Объекты: передача по ссылке

Mess4me 24.06.2017 23:17

Цитата:

Сообщение от рони (Сообщение 456377)

Рони, я уже читал эту статью , но так и не понял почему. Можешь объяснить пожалуйста.

рони 24.06.2017 23:35

Mess4me,
в аргументе(переменной) во втором случае сменили указатель(ссылку) с одного обьекта на другой. ... как-то так

j0hnik 25.06.2017 00:01

Отличии примитивных от объектов.
var a = 1, b = 2;
a = b;
b = 15;
alert(a);



var a = {n: 1}, b = {x: 2};
a = b;
b.x=3;
alert(a.x);

Alexandroppolus 26.06.2017 10:04

Цитата:

Сообщение от Mess4me
Объясните почему в одном случае присваивание происходит , а в другом нет:

в js все параметры передаются по значению, и нет механизма, чтобы как-то поменять переменную, которую передали в функцию (т.е. нет out или in-out параметров, только in).

В твоем примере есть внешняя переменная obj - ссылка на объект.
obj внутри функции func - это копия ссылки. Она ссылается на тот же объект, на который ссылается внешняя, потому в этом объекте можно что-то менять (первый случай). Во втором случае после выполнения obj = { a : 3} внутренняя obj теперь просто ссылается на другой вновь созданный объект, а внешняя не поменялась.

Mess4me 26.06.2017 23:28

Спасибо ребята!


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