2015-07-23 5 views
0

У меня есть функция, которая читает json document, dayNames и monthNames видна вне функции, но формат даты - нет. Внутри функции он правильно печатает свое значение, но вне его не обновляется внешнее значение. Итак, почему dateFormat не обновляет внешнюю функцию?Переменная внешняя область действия

var dayNames = []; 
var monthNames = []; 
var dateFormat = ""; 
$.getJSON("/Scripts/cldr/main/"+ culture + "/ca-gregorian.json", function (json) { 
    $.each([email protected](System.Threading.Thread.CurrentThread.CurrentCulture.Name).dates.calendars.gregorian.days.format.short, function (key, val) { 
     dayNames.push(val); 
    }); 
    $.each([email protected](System.Threading.Thread.CurrentThread.CurrentCulture.Name).dates.calendars.gregorian.months["stand-alone"].wide, function (key, val) { 
     monthNames.push(val); 
    }); 
    dateFormat = [email protected](System.Threading.Thread.CurrentThread.CurrentCulture.Name).dates.calendars.gregorian.dateFormats.medium; 
    console.log(dateFormat); //Output: y-MM-dd 
}); 
console.log(dateFormat); //Output: 
+0

Это связано с тем, что 'console.log (dateFormat);' выполняется перед '$ .getJSON()' обратным вызовом –

+1

'$ .getJSON()' is async. 'dateFormat' еще не доступен во внешнем' console.log() ' – Andreas

+0

Причина вне" console.log (dateFormat); " запускается до вашего обратного вызова getJSON. – ashokd

ответ

3

Проблема заключается в том $.getJSON() представляет собой асинхронный вызов. console.log(dateFomrat) вне функции запускается до завершения функции. Код продолжается, пока $.getJSON() работает, поэтому dateFormat не устанавливается, когда выполняется второй (внешний) console.log().

+0

Почему dayNames и monthNames обновляются тогда? Я попытался дать значение dateFormat перед другими двумя значениями, но результат был таким же. Я этого не понимаю. Если для выполнения двух циклов требуется некоторое время, и из-за этого внешнего журнала выполняется до даты, когда формата получила значение, давая ему значение до того, как два цикла исправит это, но это не так. Не могли бы вы объяснить мне, почему? – Erndob

+0

@Erndob попробуйте напечатать деньNames и monthNames вне getJSON, он не будет обновлять значение до тех пор, пока не будет выполнен обратный вызов getJSON. – ashokd

+0

@Erndob 'dateFormat' также доступен, просто вы печатаете' dateFormat' сразу после '$ .getJSON' вас не делают то же самое для 'dayNames' или' monthNames', вы бы видели такое же поведение, если бы вы это сделали ... – brso05

Смежные вопросы