Пожалуйста, взгляните на этот код:
$(document).ready(function() {
var urls = ['http://en.wikipedia.org/w/api.php?action=query&titles=File:Einstein2.jpg&prop=imageinfo&iiprop=url&iiurlwidth=144&format=json&callback=?', 'http://en.wikipedia.org/w/api.php?action=query&titles=File:Da_Vinci_Vitruve_Luc_Viatour.jpg&prop=imageinfo&iiprop=url&iiurlwidth=144&format=json&callback=?', 'http://en.wikipedia.org/w/api.php?action=query&titles=File:2003-32-GravitationalLens.jpg&prop=imageinfo&iiprop=url&iiurlwidth=144&format=json&callback=?'];
var x = 0;
var f = function() {
x++;
console.log(x);
};
$.getJSON(urls[0], function(json) { f(); } );
$.getJSON(urls[1], function(json) { f(); } );
$.getJSON(urls[2], function(json) { f(); } );
});
Результатом этого кода является «1», а я ожидал «1 2 3».
Я видел решения для этого (например, в этом SO-вопросе). Но я до сих пор не могу понять, почему данное решение должно работать, а приведенный выше код - нет.
ДОБАВЛЕНО: когда я добавляю некоторый код между вызовами $.getJSON или меняю console.log() на alert(), вывод действительно "1 2 3". Когда эти методы вызываются точно друг за другом, в Chrome вывод становится «1».
ДОБАВЛЕНО: Странная вещь. Совершенно не меняя код, я получил 3 разных вывода "1", "1 2", "1 2 3", просто перезагрузив страницу...