我知道回调函数是作为参数传递给另一个函数的函数,例如下面的简单示例:
function operation(a,b, callback) {
return callback(a,b);
}
function add(a,b) {
return a+b;
}
function multiply(a,b) {
return a*b;
}
console.log(operation(5,4,add)); // 9
console.log(operation(5,4,multiply)); // 20
让我对回调函数感到困惑的是它们在链式函数调用中使用时,如下所示:
// Angular example
$http.get(...).then(function(req,res) {
// some actions here
});
// JQuery example
$( "li" ).each(function( index ) {
// some actions here
});
在这两个示例中,匿名函数中的参数是如何填充的?这是否与我给出的操作函数示例中给出的回调逻辑有关,还是完全是其他概念?
我对角度示例的最佳猜测是http promise返回一个数组对象[req,res],并且函数参数按顺序从数组中提取。
我特别感兴趣的是如何以这种方式定义自己的链式函数调用。我怎样才能定义如下内容:
myObject.performAction(function(param1, param2, param3) {
// do stuff
});
如果有人可以给出这样的例子,那将是非常有启发性的。
答案 0 :(得分:3)
调用代码将参数传递给回调函数 - 与示例return callback(a,b);
中的相同
var myObject = {
a: 1,
b: 2,
c: 3,
performAction: function(callback) {
callback(this.a, this.b, this.c);
}
};
myObject.performAction(function(param1, param2, param3) {
// do stuff
});
答案 1 :(得分:0)
根据Igor的回答,我想出了以下内容来模拟$ http.get(...)。then()语法:
var myObject = {
transform: function (value) {
// Perform some logic based on the value parameter
var squared = value*value;
var cubic = value*value*value;
return {
a: squared,
b: cubic,
action: function(callback) {
callback(this.a, this.b);
}
}
}
};
myObject.transform(12).action(function(a,b) {
console.log(a+b); // 1872
});
我们的想法是,在transform函数中,您对value参数执行一些逻辑,以便a
和b
从某些计算中派生而不仅仅是硬编码值。这样,action
中的回调变得更有意义。
这有效地从a
中的匿名函数调用中抽取用户的参数b
和action
。这就是为什么必须为myObject.transform.action
的API调用记录这些参数的原因。