Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

HTML+CSS+JavaScript

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Глобальная переменная
 
 автор: OLi   (03.10.2013 в 18:42)   письмо автору
 
 

Есть такой код:
CurrentMonth = 0; // global variable




<script>
function SlideCalendar(type, NextPrevMouth, CurrentMonth){
    alert(CurrentMonth); // выводит 0 всегда
     $.ajax({
              type: "POST",
              dataType: "json",
              data: {type : type, NextPrevMouth : NextPrevMouth, CurrentMonth :
 CurrentMonth},
              url: '/other/GetCalendar',
              success: function(data) {
                     if (data.Data !== null) {
                    // Slide
                    //$('.calendar ul').hide('slide', {direction: slideTo}, 1000);
                      }

                  CurrentMonth = data.CurrentMonth; // выводит 1
       
                 // $('.sliderLeft span').text(monthName[CurrentMonth--]);
                 // $('.sliderRight span').text(monthName[CurrentMonth++]);
              }
            });
}


$(".calendar .sliderRight").click(function() {
    var type = $(this).closest('.calendar').attr('type');
    SlideCalendar(type, 'right', CurrentMonth);
    return false;
});
</script>


Почему несмотря на то что ajax возвращает CurrentMonth = 1, при следующем событии клика CurrentMonth все равно = 0?

  Ответить  
 
 автор: confirm   (03.10.2013 в 18:51)   письмо автору
 
   для: OLi   (03.10.2013 в 18:42)
 

Зачем глобальную переменную передавать в функцию аргументом, если она глобальна, а значит доступна всегда?

  Ответить  
 
 автор: OLi   (03.10.2013 в 18:54)   письмо автору
 
   для: confirm   (03.10.2013 в 18:51)
 

Это было сделано только в качестве проверки и удобства - суть вопроса совсем не в этом

  Ответить  
 
 автор: confirm   (03.10.2013 в 18:59)   письмо автору
 
   для: OLi   (03.10.2013 в 18:54)
 

Вы так думаете что не в этом? Вот в контексте вашего примера:
<script>
var n = 0;

function fn(n) {
   n++;
   alert(n); 
}
function cn() {
    fn(5);
}    
</script>    

<button onclick="cn()">Local</button>
<button onclick="alert(n)">Global</button>


Тоже самое что и у вас получается, не так ли? И это именно потому, что глобальная n к локальной n (передаваемой в аргументе) никакого отношения не имеет.

  Ответить  
 
 автор: Deed   (03.10.2013 в 19:27)   письмо автору
 
   для: OLi   (03.10.2013 в 18:54)
 

Когда вы задаете функцию, в качестве аргумента которой фигурирует уже инициализированная переменная с конкретным значением (CurrentMonth = 0;), функция, как шаблон каких-то действий в будущем, заносится в память и считает, что данная переменная - неизменяемая константа.
То есть, при всяком следующем ее вызове:
function SlideCalendar(type, NextPrevMouth, CurrentMonth){
//...
}
вместо текущего значения CurrentMonth она будет оперировать именно начальным значением этой переменной, то есть CurrentMonth = 0;
Для этого, перечисляя БУДУЩИЕ агргументы функции, нужно называть их нейтрально.
Ну, к примеру
function SlideCalendar(type, NextPrevMouth, a){
//...
}

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования