Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 03.11.2015, 18:51
Аватар для kuzroman
Кандидат Javascript-наук
Отправить личное сообщение для kuzroman Посмотреть профиль Найти все сообщения от kuzroman
 
Регистрация: 26.11.2010
Сообщений: 124

ссылка на объект через агрумент
Всем привет.

Что здесь происходит?
Почему изменить свойство по ссылке можно, а весь объект нельзя?
Если знаете где об этом прочитать, скиньте ссылку плиз.

var obj = {a:1};
function fun (obj) {
    console.log(obj); // {a:1}
    obj.a = 4;
    obj = {a:3}; // что происходит здесь? Это новая переменная? Это аргумент? если переменная то почему она не меняет глобальную, онаже без var?
    console.log(obj); // {a:3}
}
fun(obj);
console.log(obj.a); // 4
Ответить с цитированием
  #2 (permalink)  
Старый 03.11.2015, 20:41
Профессор
Отправить личное сообщение для Mess4me Посмотреть профиль Найти все сообщения от Mess4me
 
Регистрация: 03.11.2014
Сообщений: 263

obj.a = 4; // Здесь записывается свойство в объект obj , тот что вне функции , так как новый(тот что ниже ) еще не создан 
obj = {a:3}; // Здесь Вы в лексическом окружении функции создали новый объект obj.
Ответить с цитированием
  #3 (permalink)  
Старый 03.11.2015, 21:58
Аватар для kuzroman
Кандидат Javascript-наук
Отправить личное сообщение для kuzroman Посмотреть профиль Найти все сообщения от kuzroman
 
Регистрация: 26.11.2010
Сообщений: 124

Сообщение от Mess4me Посмотреть сообщение
obj.a = 4; // Здесь записывается свойство в объект obj , тот что вне функции , так как новый(тот что ниже ) еще не создан 
obj = {a:3}; // Здесь Вы в лексическом окружении функции создали новый объект obj.
понятно, а технически сам аргумент имеет ссылку или какую то связь с внешним объектом, по которой можно его изменить?
Именно аргумент? Или на данном этапе это уже отдельный экземпляр?
Ответить с цитированием
  #4 (permalink)  
Старый 03.11.2015, 22:15
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,126

kuzroman,
измените название аргумента
Сообщение от kuzroman
function fun (obj)
тут и тогда строка 5 изменит внешний обьект
var obj = {a:1};
function fun (a) {
    a.a = 4;//изменяем свойство obj 
    alert(obj.a);
    obj = {a:3};//изменяем само obj 

}
fun(obj);
alert(obj.a);

Последний раз редактировалось рони, 03.11.2015 в 22:21.
Ответить с цитированием
  #5 (permalink)  
Старый 03.11.2015, 22:57
Аватар для kuzroman
Кандидат Javascript-наук
Отправить личное сообщение для kuzroman Посмотреть профиль Найти все сообщения от kuzroman
 
Регистрация: 26.11.2010
Сообщений: 124

рони,
Это понятно)
Но вопрос был не в этом.
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Ссылка на болок внутри div'а lookoil Элементы интерфейса 2 03.08.2015 00:05
this как ссылка на сам объект HelpeR Events/DOM/Window 1 21.02.2010 15:40
Ссылка на объект JSprog Общие вопросы Javascript 6 17.08.2009 17:01
Получить объект содержащий caller no_alex Общие вопросы Javascript 14 20.03.2009 21:37
Ссылка на объект при использовании attachEvent Octane Events/DOM/Window 13 23.07.2008 17:37