|
|
|
| Есть такой код:
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? | |
|
|
|
|
|
|
|
для: OLi
(03.10.2013 в 18:42)
| | Зачем глобальную переменную передавать в функцию аргументом, если она глобальна, а значит доступна всегда? | |
|
|
|
|
|
|
|
для: confirm
(03.10.2013 в 18:51)
| | Это было сделано только в качестве проверки и удобства - суть вопроса совсем не в этом | |
|
|
|
|
|
|
|
для: 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 (передаваемой в аргументе) никакого отношения не имеет. | |
|
|
|
|
|
|
|
для: OLi
(03.10.2013 в 18:54)
| | Когда вы задаете функцию, в качестве аргумента которой фигурирует уже инициализированная переменная с конкретным значением (CurrentMonth = 0;), функция, как шаблон каких-то действий в будущем, заносится в память и считает, что данная переменная - неизменяемая константа.
То есть, при всяком следующем ее вызове:
function SlideCalendar(type, NextPrevMouth, CurrentMonth){
//...
}
вместо текущего значения CurrentMonth она будет оперировать именно начальным значением этой переменной, то есть CurrentMonth = 0;
Для этого, перечисляя БУДУЩИЕ агргументы функции, нужно называть их нейтрально.
Ну, к примеру
function SlideCalendar(type, NextPrevMouth, a){
//...
} | |
|
|
|