Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Вынуть элемент из функции (https://javascript.ru/forum/misc/78686-vynut-ehlement-iz-funkcii.html)

Ruru 20.10.2019 02:21

Вынуть элемент из функции
 
Я сильно сомневаюсь что есть какой то метод для решения данного вопроса, но на всякий случай.

У меня есть кнопка которая вызывает функцию А.

Функция А создает массив и отправляет его в функцию В где над ним происходят изменения, а именно пользователь вручную заменяет некоторые значения.

У меня есть другая кнопка которая должна делать проверку были ли внесены изменения. Другими словами мне нужно взять массив из функции А до того как она его отправит в функцию В. У меня никак не выходит это сделать.
Я пробовала сделать в функции А return(arr), то есть возвратить нужный мне массив, но как поняла вставить его потом в функцию В как параметр по принципу: В(А()) в JS нельзя.

Может есть способ вытащить какой то локальный элемент в глобальный (вообще вне функций) до того как он будет отправлен на переделку?


з.ы. хотя я понимаю что тут изначально скорее всего плохая структура функций что одна в другой (как цепная реакция).

Белый шум 20.10.2019 04:49

Цитата:

Сообщение от Ruru
У меня есть другая кнопка которая должна делать проверку были ли внесены изменения. Другими словами мне нужно взять массив из функции А до того как она его отправит в функцию В.

Похоже, что вы просто не учли того факта, что в javascript переменная типа "массив" является лишь указателем. Т.о. при простом присваивании:
var arr = arr1;

у вас получается два указателя на одни и те же данные. И при последующем изменении одного из этих массивов вы получите точно такие же изменения и во втором. Если вам нужно сохранить состояние первого массива (для последующего поиска изменений), то нужно явно скопировать данные в другую переменную:
return arr.slice();

Ruru 20.10.2019 21:41

Ну допустим у меня есть:

function A(){
  let x = [1,2]
  ........
  С(х)
  B(x)
}
function B(x){
  x = что то там
}
function С(x){
  let arr2 = x;
  return arr2.slice();
}


как мне теперь вынуть первоначальный х (вторая строчка) за пределы функций? Я попыталась сделать функцию С, перенести туда и передать в другую переменную, но это по сути бесполезно, так как просто вызвать потом C() я не могу, так как мне нужно ввести аргумент х который дается в первой функции. Запустить все функции сначала я тоже не могу, так как в реальности у меня этот х рандомно генерируется, то есть если запустить функцию заного этого будет уже другой массив. В данном случае никак ни вынуть?


з.ы. я пробовала также задать х заранее в глобале, по принципу:

let x = [];

function A(x){
...}

но изменения внесенные в массив в функции никак не отразятся на изначальном, он также навсегда останется пустым.

Белый шум 20.10.2019 22:11

function A(){
  let x = [1,2]
  let y = x.slice();
  B(x)
  alert('x=' + x);
  return y;
}

function B(x){
  x.push(3);
}

var y = A();
alert('y=' + y);


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