2016-04-25 47 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; ...),它可以處理您的範圍。

相關問題