总而言之,这个问题是要弄清楚如何在javascript函数之间传递变量而不需要:返回变量,在主要函数之间传递参数,使用全局变量,以及迫使函数1等待函数2完成。我想出了一个jQuery解决方案,并发布在下面(答案部分)。

旧帖子:我初始化了一组四个函数,每个函数以不同的方式相互调用。最后,我需要将最终的修改产品(数组)返回给初始化函数。

全局变量不会强制初始函数等待。并且将其向后退回四次也不起作用。如果无法返回,如何将已修改的变量传递回其初始化函数?还是为什么不回来呢?

(迷宫开始于initFunctionA,结束于functionD)

classOne = {
  initFunctionA : function() {
    classTwo.functionB(functionD, array);
    // I NEED ACCESS TO ARRAY2 HERE
  },
  functionD : function(data, array) {
    var array2 = // modifications to array
  }
}

{...}

classTwo = {
  functionB : function(callback, array) {
    $.ajax({
      success: function(ret){
        classTwo.functionC(ret, callback, array)
      }
    });
  },
  functionC : function(ret, callback, array) {
     callback(ret.data.x, array);
  }
}

最佳答案

更改回调(在 call 站点),以便捕获functionD的返回值。然后,更改functionD,使其返回array2。为了方便起见,我在下面的示例中添加了this访问。 (此外,如果要使JSLint满意,请确保在“必需”中包括分号。)

classOne = {
  initFunctionA : function() {
    var self = this;

    classTwo.functionB(function() {
        var array2 = functionD.apply(self, arguments);

        // ACCESS ARRAY2 HERE
    }, array);
  },
  functionD : function(data, array) {
    var array2 = // modifications to array

    return array2;
  }
};

{...}

classTwo = {
  functionB : function(callback, array) {
    $.ajax({
      success: function(ret){
        classTwo.functionC(ret, callback, array)
      }
    });
  },
  functionC : function(ret, callback, array) {
     callback(ret.data.x, array);
  }
};

10-05 20:49
查看更多