哪个jQuery回调被解雇了?

Jen*_*-Ya 2 javascript ajax jquery jquery-callback

可能重复:
循环内部的Javascript闭包 - 简单实用的例子

让我们假设您在for循环中创建一些ajax请求,如下所示:

$(function(){
    for(var i=0;i<10;i++){
      $.ajax({
        url : '/',
        success : function(){
          console.log('callback '+i+' fired!');
        }
      });
    }
});
Run Code Online (Sandbox Code Playgroud)

当然,回调每次都会记录'callback 10 fired',因为回调是异步执行的.问题是:你怎么知道哪个回调被解雇了?

的jsfiddle

zer*_*kms 5

匿名自调用函数将解决此闭包问题:

$(function(){
    for(var i=0;i<10;i++){
      (function(i) {
          $.ajax({
            url : '/',
            success : function(){
              console.log('callback '+i+' fired!');
            }
          });
      })(i);
    }
});
Run Code Online (Sandbox Code Playgroud)


Ste*_*ann 5

使用立即调用的函数表达式创建范围:

$(function(){
    for(var i=0;i<10;i++){
      (function(i){
        $.ajax({
          url : '/',
          success : function(){
            console.log('callback '+i+' fired!');
          }
        });
      })(i);
    }
});
Run Code Online (Sandbox Code Playgroud)