Передача параметра по ссылке
Здравствуйте.
Сегодня столкнулся с необходимостью изменения объекта внутри функции, а за её пределами эти изменения должны быть собственно видны. Был здесь, и да, опровергаю - у меня так почему то не работает, при том что передаю я полноценный объект, с полями и методами. Мои детали: ввиду определённых логических хитросплетений (и возможно технической безграмотности), ссылка на желаемый объект объявлена глобально, изначально сразу её содержимое равняется 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, время: 08:45. |