Этот вопрос заключается в том, чтобы выяснить, как передавать переменные между функциями javascript без: возвращать переменные, передавать параметры между первичными функциями, используя глобальные переменные и принудительную функцию 1 дождаться завершения функции 2. Я вычислил решение jQuery и разместил его ниже (в разделе ответов).Как получить переменную, возвращаемую через несколько функций - Javascript/jQuery
Old Post: Я инициализирую набор из четырех функций, каждый из которых вызывает друг друга по-другому. В конце этого мне нужен окончательный модифицированный продукт (массив), возвращаемый функции инициализации.
Глобальные переменные не заставляют начальную функцию ждать. И возврат его назад четыре раза тоже не работает. Как передать измененную переменную обратно в ее функцию инициализации, если вы не можете ее вернуть? Или почему он не возвращается?
(лабиринт начинается initFunctionA
, заканчивается в functionD
)
classOne = {
initFunctionA : function() {
classTwo.functionB(functionD, array);
// I NEED ACCESS TO ARRAY2 HERE
},
functionD : function(data, array) {
var array2 = // modifications to array
}
}
{...}
classTwo = {
functionB : function(callback, array) {
$.ajax({
success: function(ret){
classTwo.functionC(ret, callback, array)
}
});
},
functionC : function(ret, callback, array) {
callback(ret.data.x, array);
}
}
Javascript массивы передаются по ссылке, так что если вы держите проходя тот же массив вложенных функций, которые вы должны получить измененный массив в последнем вызове. Не могли бы вы опубликовать полный рабочий код? –
Этот код действительно не имеет никакого смысла; 'classTwo.function (functionB, array)' в частности. Вы говорите, что вы собираетесь * вызывать * функцию B там? – Pointy
@axel_c - вы правы. Прости. Я создаю еще один массив (array2) в моей последней функции, используя первый массив. Я попытался просто сказать array = array2 в конце всего этого, но он все еще не работает. Он возвращает данные перед изменениями (initFunctionA работает без ожидания). Код действительно длинный. Я сделал исправления выше, хотя, надеюсь, это более понятно. Спасибо за вашу помощь! – Kyle