Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   ссылка на объект через агрумент (https://javascript.ru/forum/events/59272-ssylka-na-obekt-cherez-agrument.html)

kuzroman 03.11.2015 18:51

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

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

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

Mess4me 03.11.2015 20:41

obj.a = 4; // Здесь записывается свойство в объект obj , тот что вне функции , так как новый(тот что ниже ) еще не создан 
obj = {a:3}; // Здесь Вы в лексическом окружении функции создали новый объект obj.

kuzroman 03.11.2015 21:58

Цитата:

Сообщение от Mess4me (Сообщение 394385)
obj.a = 4; // Здесь записывается свойство в объект obj , тот что вне функции , так как новый(тот что ниже ) еще не создан 
obj = {a:3}; // Здесь Вы в лексическом окружении функции создали новый объект obj.

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

рони 03.11.2015 22:15

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

kuzroman 03.11.2015 22:57

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


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