Как передать значение одной переменных внутри одной функции в другую?
Простите за ,возможно, слишком примитивный вопрос.
Есть 2 функции условно function f1(a,b){ function f2 () { var c = получается значение аяксом; } var d=a+b-c; var s=z+y+c; } function f3(e,f,g){ var s=d+s+(e*f)/g; } Задача: передать значения переменных (d,s) внутри функции f1, если значение с получено аяксом исходя из входных значений (a,b). Как мне передать значения d и s из функции f2 (внутри f1) в функцию f3? Только начал изучать js, банально не хватает знаний, но нужно решить эту задачу. Может как-нибудь глобальной переменной? Так как повторить запрос во второй функции аяксом не представляется возможным. |
Пожалуйста, отформатируйте свой код!
Для этого его можно заключить в специальные теги: js/css/html и т.п., например: [js] ... ваш код... [/js] О том, как вставить в сообщение исполняемый javascript и html-код, а также о дополнительных возможностях форматирования - читайте http://javascript.ru/formatting. |
function f1(a,b){ var d, s; //... function f2 () { var c = "получается значение аяксом"; d=a+b-c; s=z+y+c; } function f3(e,f,g){ код функции var s=d+s+(e*f)/g; } } Чтобы работало нужно чтобы f3 вызывался после выполнения f2 (то есть ответа от сервера) |
tsigel,
А как это сделать в моем случае, это получается, что функцию f3 его нужно засунуть в f1? В моем случае функции запускаются по очереди. Условно говоря первая функция выводит форму, при клике по кнопке, а вторая занимается просчетами цен. Что вообще можно сделать в таком случае? Функция f1 и f3 вызываются в коде и внутри себя выдают алерты. Но задача - передать значение. Глобальными переменными это возможно? Вроде как объявить window.переменную вне функций, а при выполнении f1 менять глобальное значение. Так реально, или глупости пишу? |
Sergio022,
очень много вопросов из базоых вещей js. Почитайте учебник, там написано лучше чем если я буду объяснять. Если что-то непонятно в учебнике - спрашивайте. чтобы из функции сделать глобальную переменную надо написать window.name = value, но я вам этого не говорил и глобальные переменные - зло) Всегда есть решение лучше. Вообще если вам понадобились глобальные переменные - значит что-то в коде не так. |
tsigel,
В учебнике я изучал переменные и функции. и никак не пойму, как 2 разные функции, которые никак друг с другом не связаны (кроме 2-х внутренних переменных) и вызываются в разное время. На слух задача вроде бы простая, но застрял, хоть убей. |
Читайте про области видимости функций и замыкания
|
tsigel,
var d=0; var s=0; function f1(a,b){ function f2 () { c = получается значение аяксом; } window.d=a+b-c; window.s=z+y+c; } function f3(e,f,g){ var s=d+s+(e*f)/g; } В моем случае в функции f3 c и d =0, а не новому значению window.d и window.s У меня какой-то клинический случай, уж извините, застрял в этом моменте, может и не там копаю. Или в моем случае после выполнения функции переменная очищается. |
У вас беда в вызове функций
function f1(a,b){ var d = 0, s = 0; //... function f2 () { var c = "получается значение аяксом"; d=1; s=2; f3(); } function f3(e,f,g){ alert("d = " + d + "; s = " + s); } f2(); } f1(); Выложите весь код или делайте по аналогии. |
Потому что аякс асинхронный, и ответ может прийти и через пять минут. К тому времени весь код уже выполнится давно.
Соответственно вызывать его надо по колбэку аякса. |
Вложений: 1
tsigel, спасибо, что помогаете, прицепил настоящий файл.
Я не совсем уверен, что метод, который вы предложили подойдет в моем случае? Хотя, наверное, я ошибаюсь. |
Sergio022,
ОМГ... Я так понимаю что вас интересует max_count и max_child_count? Объявите их глобально. Везде где хотите ими пользоваться уберите перед ними var. Если у вас в родительской функции (или глобально) объявлена переменная, и вы пишете var то вы не используете вышеобъявленную переменную, а создаете локальную. Тогда и доступа к ней нет. Ну и, как заметил Aetae, вызывать функцию использующую результат запроса можно лишь после ответа. В противном случае данных от сервера не будет. |
tsigel,
Да, я над этими переменными и бьюсь. То есть я объявляю вне функций window.max_count и window.max_child_count, а внутри аякса присваиваю значения без var и значение, полученное из аякса будет доступно для всех внешних функций? Как можно вызывать по колбэку аякса, не понял, можно поподробнее? |
вызывайте функцию в которой пользуете результат внутри функции success
можно не window.name ф просто написать var name вне функций. То что написано вне функций - глобально. |
tsigel, как объявить я понял, но если ее приравнять нулю, то везде будет ноль, и из функции значение не берется. Я думал, что можно из функции изменить значение глобальной переменных для всех функций, а оно у меня изменяется только локально. Внутри самой функции алерт дает правильный ответ, а вне функции 0
|
Sergio022, ещё раз: она изменяется, но изменяется после ответа от сервера, когда уже все ваши функции выполнились с начальным значением.
Пример: Вы кричите девушке в соседнюю комнату: чай или кофе она будет, после чего сразу наливаете чай и идёте к ней. Её ответ "кофе" через пару минут уже не имеет никакого значения, потому что вы уже как дурак стоите перед ней с чаем. |
Aetae, отличный пример:) А что надо сделать, чтобы успеть успеть?
|
Часовой пояс GMT +3, время: 21:43. |