如何在done()函数的for循环中获取正确的值?

时间:2013-09-12 17:37:08

标签: javascript

我一直在努力为此找到解决方案,我发现了类似的事情,但与此问题并不完全相同。

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的最后一个值。

1 个答案:

答案 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/