总而言之,这个问题是要弄清楚如何在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);
}
};