Передача параметра по ссылке
Здравствуйте.
Сегодня столкнулся с необходимостью изменения объекта внутри функции, а за её пределами эти изменения должны быть собственно видны. Был здесь, и да, опровергаю - у меня так почему то не работает, при том что передаю я полноценный объект, с полями и методами. Мои детали: ввиду определённых логических хитросплетений (и возможно технической безграмотности), ссылка на желаемый объект объявлена глобально, изначально сразу её содержимое равняется null. В зависимости от определённых условий, мне нужно передать эту ссылку в функцию, функция что-то чудит на локальном уровне, и изначально переданная глобальная переменная должна меняться соответственно. Сделано так потому что изначально два одинаковых объекта с разными интерфейсными назначениями. var global_1=null,global_2=null; function Change(local_once) { // здесь что-то творим с local_once } /* ... */ function UserAction(param) { if (param==1) Change(global_1); else Change(global_2); } Доступ к глобальным переменным не должен зависеть от выполнения, а значит - должно меняться состояние в зависимости от параметров пользовательского события. То есть, в какой-то момент в консоли по запросу global_1 или global_2 мне нужно видеть, что там находится. НО, передаваемая переменная глобально не изменяется. Что делать ? |
Выполнил модификацию согласно изначальным требованиям:
var global_1=null,global_2=null; function Change(param) { var local_once; if (param==1) local_once=global_1; else local_once=global_2; // здесь что-то творим с local_once // НО ЭТОГО НЕ ДОСТАТОЧНО if (param==1) global_1=local_once; else global_2=local_once; } /* ... */ function UserAction(param) { Change(param); } Из чего я делаю вывод: мало того что переменные передаются не по ссылке, так ещё их дополнительно нужно сохранять, так как судя по всему обычное присваивание делает копию объекта. |
Оно перестаёт ссылаться, поскольку вы делаете подмену объекта! Что бы случайно не переопределить, используйте const!
const global1 = {}, global2 = {}; function Change(param) { const temp = param === 1 ? global1 : global2; // здесь что-то творим с temp } function UserAction(param) { Change(param); } |
Malleys, тут сразу вопросы от "вчерашнего новичка" ...
1. Константы могут меняться ? 2. Присвоенное выше значение будет изменено в процессе изменения temp ? В остальном, по логике я сделал тоже самое. |
Цитата:
Например, это может выглядеть так (если вы присваивали тем глобальным переменным числа числа) const global1 = { value: null }, global2 = { value: null }; function Change(param) { const temp = param === 1 ? global1 : global2; // здесь что-то творим с temp temp.value = 5; // и теперь поменялось содержимое соответствующего глобального объекта } function UserAction(param) { Change(param); } |
Цитата:
|
Часовой пояс GMT +3, время: 10:37. |