Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 11.08.2014, 19:44
Интересующийся
Отправить личное сообщение для Sergio022 Посмотреть профиль Найти все сообщения от Sergio022
 
Регистрация: 08.08.2014
Сообщений: 25

Как передать значение одной переменных внутри одной функции в другую?
Простите за ,возможно, слишком примитивный вопрос.

Есть 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, банально не хватает знаний, но нужно решить эту задачу.

Может как-нибудь глобальной переменной?
Так как повторить запрос во второй функции аяксом не представляется возможным.

Последний раз редактировалось Sergio022, 11.08.2014 в 20:07.
Ответить с цитированием
  #2 (permalink)  
Старый 11.08.2014, 20:03
Профессор
Отправить личное сообщение для tsigel Посмотреть профиль Найти все сообщения от tsigel
 
Регистрация: 12.12.2012
Сообщений: 1,398

Пожалуйста, отформатируйте свой код!

Для этого его можно заключить в специальные теги: js/css/html и т.п., например:
[js]
... ваш код...
[/js]


О том, как вставить в сообщение исполняемый javascript и html-код, а также о дополнительных возможностях форматирования - читайте http://javascript.ru/formatting.
Ответить с цитированием
  #3 (permalink)  
Старый 11.08.2014, 20:06
Профессор
Отправить личное сообщение для tsigel Посмотреть профиль Найти все сообщения от tsigel
 
Регистрация: 12.12.2012
Сообщений: 1,398

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 (то есть ответа от сервера)
Ответить с цитированием
  #4 (permalink)  
Старый 11.08.2014, 20:13
Интересующийся
Отправить личное сообщение для Sergio022 Посмотреть профиль Найти все сообщения от Sergio022
 
Регистрация: 08.08.2014
Сообщений: 25

tsigel,
А как это сделать в моем случае, это получается, что функцию f3 его нужно засунуть в f1?
В моем случае функции запускаются по очереди. Условно говоря первая функция выводит форму, при клике по кнопке, а вторая занимается просчетами цен.

Что вообще можно сделать в таком случае? Функция f1 и f3 вызываются в коде и внутри себя выдают алерты. Но задача - передать значение. Глобальными переменными это возможно? Вроде как объявить window.переменную вне функций, а при выполнении f1 менять глобальное значение. Так реально, или глупости пишу?

Последний раз редактировалось Sergio022, 11.08.2014 в 20:16.
Ответить с цитированием
  #5 (permalink)  
Старый 11.08.2014, 20:23
Профессор
Отправить личное сообщение для tsigel Посмотреть профиль Найти все сообщения от tsigel
 
Регистрация: 12.12.2012
Сообщений: 1,398

Sergio022,
очень много вопросов из базоых вещей js. Почитайте учебник, там написано лучше чем если я буду объяснять. Если что-то непонятно в учебнике - спрашивайте.

чтобы из функции сделать глобальную переменную надо написать window.name = value, но я вам этого не говорил и глобальные переменные - зло) Всегда есть решение лучше. Вообще если вам понадобились глобальные переменные - значит что-то в коде не так.

Последний раз редактировалось tsigel, 11.08.2014 в 20:25.
Ответить с цитированием
  #6 (permalink)  
Старый 11.08.2014, 20:28
Интересующийся
Отправить личное сообщение для Sergio022 Посмотреть профиль Найти все сообщения от Sergio022
 
Регистрация: 08.08.2014
Сообщений: 25

tsigel,
В учебнике я изучал переменные и функции.
и никак не пойму, как 2 разные функции, которые никак друг с другом не связаны (кроме 2-х внутренних переменных) и вызываются в разное время. На слух задача вроде бы простая, но застрял, хоть убей.
Ответить с цитированием
  #7 (permalink)  
Старый 11.08.2014, 20:36
Профессор
Отправить личное сообщение для tsigel Посмотреть профиль Найти все сообщения от tsigel
 
Регистрация: 12.12.2012
Сообщений: 1,398

Читайте про области видимости функций и замыкания
Ответить с цитированием
  #8 (permalink)  
Старый 11.08.2014, 21:27
Интересующийся
Отправить личное сообщение для Sergio022 Посмотреть профиль Найти все сообщения от Sergio022
 
Регистрация: 08.08.2014
Сообщений: 25

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
У меня какой-то клинический случай, уж извините, застрял в этом моменте, может и не там копаю. Или в моем случае после выполнения функции переменная очищается.
Ответить с цитированием
  #9 (permalink)  
Старый 11.08.2014, 22:21
Профессор
Отправить личное сообщение для tsigel Посмотреть профиль Найти все сообщения от tsigel
 
Регистрация: 12.12.2012
Сообщений: 1,398

У вас беда в вызове функций

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();


Выложите весь код или делайте по аналогии.
Ответить с цитированием
  #10 (permalink)  
Старый 11.08.2014, 22:36
Аватар для Aetae
Тлен
Отправить личное сообщение для Aetae Посмотреть профиль Найти все сообщения от Aetae
 
Регистрация: 02.01.2010
Сообщений: 6,589

Потому что аякс асинхронный, и ответ может прийти и через пять минут. К тому времени весь код уже выполнится давно.
Соответственно вызывать его надо по колбэку аякса.
__________________
29375, 35
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как и где задать цикл? Blondinka Events/DOM/Window 2 10.06.2014 15:29
Как вы относитесь к наркоманам? Maxmaxmaximus7 Оффтопик 7 05.02.2014 13:29
Копировать значение input с одной странице на другую lamer Элементы интерфейса 0 06.03.2012 04:03
Можно ли передать переменую grid из одной функции в другую alexrzl ExtJS 1 16.11.2010 18:33
Как передать значение по ссылке на другую страницу сайта Rollo Общие вопросы Javascript 7 18.10.2010 15:02