Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 24.06.2017, 22:36
Профессор
Отправить личное сообщение для Mess4me Посмотреть профиль Найти все сообщения от Mess4me
 
Регистрация: 03.11.2014
Сообщений: 263

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

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 );

Последний раз редактировалось Mess4me, 24.06.2017 в 23:20.
Ответить с цитированием
  #2 (permalink)  
Старый 24.06.2017, 23:07
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,068

Mess4me,
Объекты: передача по ссылке
Ответить с цитированием
  #3 (permalink)  
Старый 24.06.2017, 23:17
Профессор
Отправить личное сообщение для Mess4me Посмотреть профиль Найти все сообщения от Mess4me
 
Регистрация: 03.11.2014
Сообщений: 263

Сообщение от рони Посмотреть сообщение
Mess4me,
Объекты: передача по ссылке
Рони, я уже читал эту статью , но так и не понял почему. Можешь объяснить пожалуйста.
Ответить с цитированием
  #4 (permalink)  
Старый 24.06.2017, 23:35
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,068

Mess4me,
в аргументе(переменной) во втором случае сменили указатель(ссылку) с одного обьекта на другой. ... как-то так
Ответить с цитированием
  #5 (permalink)  
Старый 25.06.2017, 00:01
Аватар для j0hnik
Профессор
Отправить личное сообщение для j0hnik Посмотреть профиль Найти все сообщения от j0hnik
 
Регистрация: 01.12.2016
Сообщений: 3,650

Отличии примитивных от объектов.
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);
Ответить с цитированием
  #6 (permalink)  
Старый 26.06.2017, 10:04
Аватар для Alexandroppolus
Профессор
Отправить личное сообщение для Alexandroppolus Посмотреть профиль Найти все сообщения от Alexandroppolus
 
Регистрация: 25.10.2016
Сообщений: 1,005

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

В твоем примере есть внешняя переменная obj - ссылка на объект.
obj внутри функции func - это копия ссылки. Она ссылается на тот же объект, на который ссылается внешняя, потому в этом объекте можно что-то менять (первый случай). Во втором случае после выполнения obj = { a : 3} внутренняя obj теперь просто ссылается на другой вновь созданный объект, а внешняя не поменялась.
Ответить с цитированием
  #7 (permalink)  
Старый 26.06.2017, 23:28
Профессор
Отправить личное сообщение для Mess4me Посмотреть профиль Найти все сообщения от Mess4me
 
Регистрация: 03.11.2014
Сообщений: 263

Спасибо ребята!
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вопрос авторизации. 0931454574 Серверные языки и технологии 8 12.04.2011 11:09
Вопрос на миллион. Ajax и идентификация по адресной строке. 0931454574 AJAX и COMET 5 31.03.2011 11:54
Вопрос по замыканиям Goodfella Общие вопросы Javascript 20 09.03.2011 01:21
Вопрос по работе функций в PHP bayah Серверные языки и технологии 2 12.02.2011 17:42
Теоретический вопрос. gods33 (X)HTML/CSS 10 16.12.2010 23:49