@Mr_Boombastic

Почему внутри функции, при изменении элементов массива, переданного в виде аргумента, меняется оригинал, а не локальная копия массива?

Добрый вечер!
Сразу ссылка на jsfiddle.
Опишу ситуацию.
Если внутри функции мы присваиваем массиву, переданному в виде аргумента новое значение (другой массив), происходит вполне ожидаемая вещь - локальная копия массива перезаписывается, а глобальная остается неизменной.
Однако, если мы оперируем внутри функции элементами массива, то изменения сказываются и на глобальной копии массива.
Видимо, еще не до конца разобрался с областями видимости, поэтому хотелось бы понять, с чем связано такое поведение и от кого еще можно ожидать такого подвоха?
Ссылки на матчасть очень приветствуются.
  • Вопрос задан
  • 2637 просмотров
Решения вопроса 3
@ldvldv
Массив - это объект. А объекты передаются по ссылке, а не по значению.
js-help.net/text/function/postroenie_funktsii/pere...
Ответ написан
Комментировать
Sanasol
@Sanasol Куратор тега JavaScript
нельзя просто так взять и загуглить ошибку
В коде разница только в перезаписи массива.
arr[i]
или
arr = result

Массивы и объекты передаются в функцию как ссылки т.е. изменяется оригинал в глобальной области видимости.

В первом случае(с arr[i]) отрабатывает как и должно.
Во втором случае(с arr = result) происходит магия. Видимо нельзя полностью заменить объект. Не нашел описания почему так получается. UPD: торможу, это называется by sharing.

Ссылки:
snook.ca/archives/javascript/javascript_pass
dmitrysoshnikov.com/ecmascript/ru-chapter-8-evalua...
Ответ написан
haiku
@haiku
Потому что передается не сам массив а рефренс на него.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
DJZT
@DJZT
Laravel - code for you
Почитай про особенности JS. Это глобальные переменные. JS не такой как все. Советую начать отсюда javascript.ru
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы