这是我的困境,我有一系列被调用的函数,我使用回调来完成一个函数。回调返回一个值,这也很有效,我的问题是当我向回调添加参数时,我无法再访问返回的值。这是一个有效的例子:
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 :(*/
}
我需要一种方法来访问值返回以及我的参数。是这样的吗?
答案 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
,它会评估x
和y
时的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>