带有参数和返回值的Javascript回调

带有参数和返回值的Javascript回调,javascript,callback,Javascript,Callback,这是我的困境,我有一系列被调用的函数,当它们完成时,我使用回调来执行一个函数。回调返回一个值,这也很有效,我的问题是当我向回调添加参数时,我无法再访问返回的值。以下是一个有效的示例: function myFunc1(x, y) { /*do stuff*/ myFunc2(z, callback); } function callback(results) { alert(results); /*this works!*/ } 这非常有效,返回的结果会显示出来。我的问题

这是我的困境,我有一系列被调用的函数,当它们完成时,我使用回调来执行一个函数。回调返回一个值,这也很有效,我的问题是当我向回调添加参数时,我无法再访问返回的值。以下是一个有效的示例:

function myFunc1(x, y) {
   /*do stuff*/
   myFunc2(z, callback);
}

function callback(results) {
   alert(results);  /*this works!*/
}
这非常有效,返回的结果会显示出来。我的问题是我需要这样做:

function myFunc1(x, y) {
   /*do stuff*/
   myFunc2(z, callback(x,y));
}

function callback(x,y,results) {
   alert(x);        /*works!*/
   alert(y);        /*works!*/
   alert(results);  /*doesn't work :(*/
}
我需要一种访问返回值和参数的方法。像这样的东西可能吗???

你可以用,像这样

myFunc2(z, callback.bind(null, x, y));

bind
函数将返回一个新函数,第一个参数作为上下文,下一个参数是调用时传递给
回调
的实际参数。

您不需要立即调用
回调
,而是创建一个函数,稍后使用预期参数调用
回调

function myFunc1(x, y) {
    /*do stuff*/
    myFunc2(z, function(results) {
        callback(x, y, results);
    });
}
@thefourtheye提出的变体基本上是该函数表达式的快捷方式

1:对于
function(results){return callback.call(null,x,y,results)}
,它传递的参数比只传递
results
的参数要多,并且在
bind
调用时,它会计算
x
y