声明的数组返回undefined

在我的项目中,其中一个函数应该用新的统计信息更新用户列表,我有这个function:

function gameEnded(team){ //reset variables playersObject = {}; isPlaying = false; subQueue = {}; subArray = []; blueList = ["Jonas","LucasTT"]; redList = ["Lucas","Manelzao"]; //updates database for(i=0; i<blueList.length; i++){ getPlayerStats(blueList[i], function(oldStats){ console.log(blueList[i]); setPlayerStats(blueList[i], [oldStats[0]+6,oldStats[1]]); }); } } 

它应该从列表中获得一个名称,获取名称的统计信息(使用MySQL),然后进行更新。 但是,console.log中的日志未定义,但数组已声明。 是什么原因造成的呢?

问题是callback不运行,直到循环完成后,在这一点上, i等于blueList.length ,并在JavaScript索引过去的数组结束返回undefined

你需要在循环的每个迭代中冻结i的值,这可以用一个IIFE完成:

 for(i=0; i<blueList.length; i++){ (function(i) { getPlayerStats(blueList[i], function(oldStats){ console.log(blueList[i]); setPlayerStats(blueList[i], [oldStats[0]+6,oldStats[1]]); }); })(i); }