带有参数和返回值的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