2016-04-25 48 views
0

这里是代码别人张贴的解决方案:在for循环中使用getJSON,为什么我必须分配一个函数来保存计数器的值?

for (var i = 0; i < array.length; i++) { 
(function(i) { // protects i in an immediately called function 
    $.getJSON('/api.php?action=query&list=querypage&qppage=' + array[i] + '&format=json', function (data) { 
    $('#' + array[i]).text(data.query.querypage.results.length); 
    }); 
})(i); 
} 

具体来说,什么是(我)做在函数的结束?

+0

因为它是异步的 – adeneo

+1

[JavaScript闭合内循环 - 简单实用的例子](http://stackoverflow.com/questions/750486/javascript-closure-inside-loops-simple-practical-example) – adeneo

+1

你正在通过IIFE的循环索引作为参数,所以它的本地范围在该函数中。 – Andy

回答

0

简短的回答是,如果你不这样做,i的值不会像你期望的那样用于以后的函数调用。删除闭包((i))将使其始终为所有调用的最大值,因为它们都是瞬间发生的(这就是异步编程的本质)。

您可以围绕此调用创建一个函数,然后使用值i调用该函数,以便在getJSON完成时保留该值。另请注意,如果您使用的是ES2015,则可以使用for(let i = 0; ...),它可以处理您的范围。

相关问题