0

我一直在尝试为此找到解决方案,并且我发现了类似的东西,但与这个问题并不完全相同。

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.

4

1 回答 1

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/

于 2013-09-12T17:39:45.703 回答