首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >哪个jQuery回调启动了?

哪个jQuery回调启动了?
EN

Stack Overflow用户
提问于 2012-11-25 21:18:01
回答 3查看 75关注 0票数 2

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

让我们想象一下,您在如下的for-循环中创建了一些ajax请求:

代码语言:javascript
复制
$(function(){
    for(var i=0;i<10;i++){
      $.ajax({
        url : '/',
        success : function(){
          console.log('callback '+i+' fired!');
        }
      });
    }
});

当然,回调每次都会记录“回调10”,因为回调是异步执行的。问题是:你怎么知道哪个回调被触发了?

小提琴

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-11-25 21:20:09

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

代码语言:javascript
复制
$(function(){
    for(var i=0;i<10;i++){
      (function(i) {
          $.ajax({
            url : '/',
            success : function(){
              console.log('callback '+i+' fired!');
            }
          });
      })(i);
    }
});
票数 5
EN

Stack Overflow用户

发布于 2012-11-25 21:21:29

使用立即调用的函数表达式创建作用域:

代码语言:javascript
复制
$(function(){
    for(var i=0;i<10;i++){
      (function(i){
        $.ajax({
          url : '/',
          success : function(){
            console.log('callback '+i+' fired!');
          }
        });
      })(i);
    }
});
票数 5
EN

Stack Overflow用户

发布于 2012-11-25 21:21:02

通过将i的当前值作为闭包的一部分传递:

代码语言:javascript
复制
$(function(){
    for(var i=0;i<10;i++){
      $.ajax({
        url : '/',
        success : (function(i){
          return function(){console.log('callback '+i+' fired!');}
        })(i)
      });
    }
});

下面是一个演示:http://jsfiddle.net/rRwgW/4/

注意:您实际上不需要将整个ajax调用包装在IIFE中,只需要引用i的值的回调。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13555582

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档