带参数和返回值的Javascript回调

时间:2015-06-16 18:29:04

标签: 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(x,y));
}

function callback(x,y,results) {
   alert(x);        /*works!*/
   alert(y);        /*works!*/
   alert(results);  /*doesn't work :(*/
}

我需要一种方法来访问值返回以及我的参数。是这样的吗?

2 个答案:

答案 0 :(得分:6)

您可以使用Function.prototype.bind,就像这样

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

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

答案 1 :(得分:1)

您需要立即调用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,它会评估xy时的bind$queryvps = "SELECT COUNT(ID) FROM vpss"; $resultvps = mysql_query($queryvps) or die(mysql_error()); foreach(mysql_fetch_array($resultvps) as $vpscount); j-expression来电。{/ sub>