我在函数中有以下代码:

for (var key in handlers) {
  var handler = new handlerClass(key);
  handler.search(user.login, function(userFound) {
    if (!userFound) {
      handler.create... //Here handler is the last handler of the loop
    }
  });
}


我了解会发生什么,在调用handler.create之前,循环完成,因此,在调用它时,处理程序等于循环的最后一个处理程序。

我该如何解决?

最佳答案

这是因为关闭。阅读有关herehere的信息。

这应该可以解决您的问题。

for (var key in handlers) {
    var handler = new handlerClass(key);
    (function (handlerInstance) {
        handlerInstance.search(user.login, function (userFound) {
            if (!userFound) {
                // use handlerInstance here
            }
        });
    })(handler);
}

09-18 07:16