我一直在努力为此找到解决方案,我发现了类似的事情,但与此问题并不完全相同。
for (var i = 0; i < userArray.length; i++) {
var username = userArray[i];
var employee_id = $('#' + username + '_corresponding_employee_id').val();
followUserBatch(user, username).done(function(data) {
// How to get the correct value of username in here?
outcomes.done.push(username);
})
}
基本上最终发生的事情是,当我outcomes.done.push(username);
时,用户名始终是userArray
的最后一个值。
答案 0 :(得分:4)
您可以使用IIFE正确调整变量的范围:
for (var i = 0; i < userArray.length; i++) {
var username = userArray[i];
(function (inner_username) {
var employee_id = $('#' + inner_username + '_corresponding_employee_id').val();
followUserBatch(user, inner_username).done(function(data) {
outcomes.done.push(inner_username);
})
})(username);
}
IIFE =立即调用函数表达式。你可以传入一个稍后会改变的变量,它的值在IIFE中保持不变。
以下是对IIFE的一些解释:http://benalman.com/news/2010/11/immediately-invoked-function-expression/