Javascript 带有参数和 Return 值的回调

Javascript Callback with Parameters and Return Value

这是我的困境,我有一系列被调用的函数,我正在使用回调函数在它们完成时执行函数。回调 return 是一个值,而且效果很好,我的问题是当我向回调添加参数时,我无法再访问 returned 值。这是一个有效的例子:

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

function callback(results) {
   alert(results);  /*this works!*/
}

效果很好,显示了 returned 的结果。我的问题是我需要做的是这样的:

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 :(*/
}

我需要一种方法来访问值 return 以及我的参数。这样的事情可能吗??

你可以像这样使用Function.prototype.bind

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

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

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

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

@thefourtheye提出的.bind()变体基本上是1这个函数表达式的快捷方式

1:对于 function(results) { return callback.call(null, x, y, results) },它也会传递比 results 更多的参数,并且它会评估 xybind 调用时。