Javascript回调函数-如何填充参数

Javascript callback function - how do the parameters get populated

本文关键字:填充 参数 何填充 回调 函数 Javascript      更新时间:2023-09-26

我知道回调是作为参数传递给另一个函数的函数,例如下面的简单示例:

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
});

在这两个示例中,匿名函数中的参数是如何填充的?这与我在操作函数示例中给出的回调逻辑有任何关系吗?或者这完全是其他概念吗?

我对angular示例的最佳猜测是http promise返回一个数组对象[req,res],并且函数参数是按顺序从数组中提取的。

我特别感兴趣的是如何以这种风格定义自己的链式函数调用。我如何定义像这样的东西

myObject.performAction(function(param1, param2, param3) {
    // do stuff
});

如果有人能举一个这样的例子,那将是非常有启发性的。

调用代码将参数传递给回调函数,与示例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
});

根据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
});

其思想是,在转换函数中,对值参数执行一些逻辑,以便ab是从一些计算中导出的,而不仅仅是硬编码的值。这样action中的回调就变得更有意义了。

这在action中的匿名函数调用中有效地从用户提取了参数ab。这就是为什么API对myObject.transform.action的调用必须记录这些参数的原因。