arver, стоит тогда вернуться к изучению области видимости переменных, изучению функций и ссылок.
Поясню. В параметре функции содержится переменная, которая будет содержать значение или ссылку, переданное ей аргументом при вызове. В функцию вы передаете ссылку на переменную, точно также, как если бы вы сделали вот так
var obj = { a: 1 };
var obj2 = obj;
в obj2 вы передали ссылку на obj, теперь даже если вы удалите obj, то obj2 продолжит содержать в себе все ту же ссылку на { a: 1 }.
Если вы напишите obj2 = { a: 10 }
то вы не измените значение ссылки {a: 1}, вы лишь поменяете ссылку в obj2, на другую, а исходная {a: 1} не поменяется, она так и будет лежать в памяти до сборки мусора.
т.е. что мы делаем, мы передаем ссылку { a: 1 } в функцию, ссылка присваивается в obj2, теперь две переменные содержать одинаковую ссылку. Но потом в теле функции мы меняем ссылку у obj2 на { a: 2 }, теперь на { a: 1 } ссылается только одна переменная.
Да,то что я ссылку передаю это понятно...Я думал обращение идет сразу к глобальному obj.А получается обращение идет к полю obj объекта LexicalEnvironment и в объекте LexicalEnvironment перезатирается ссылка