Javascript回调函数-如何填充参数
Javascript callback function - how do the parameters get populated
我知道回调是作为参数传递给另一个函数的函数,例如下面的简单示例:
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
});
其思想是,在转换函数中,对值参数执行一些逻辑,以便a
和b
是从一些计算中导出的,而不仅仅是硬编码的值。这样action
中的回调就变得更有意义了。
这在action
中的匿名函数调用中有效地从用户提取了参数a
和b
。这就是为什么API对myObject.transform.action
的调用必须记录这些参数的原因。
相关文章:
- 如何让typeahead在我的搜索栏中填充自定义参数
- 如何使用Javascript从URL参数中自动填充文本字段
- IE JavaScript参数和填充输入字段
- 流星将参数传递给助手以基于该参数填充页面
- 使用javascript从url参数填充texbox值
- 当表单控件选项具有多个参数时,如何在组合框中填充所选项目
- 控制器操作参数未从 AJAX 开机自检正确填充
- 填充的参数什么都没有被填充
- 尝试制作可重用的代码,使用函数参数填充名为 target 的变量的区域
- 使用基于查询字符串参数的 Angular 填充选择元素
- Rails 输入表单填充了 jQuery .val(),但参数中不存在数据
- 使用javascript数据填充rails参数
- Angular UI路由器-尽管$stateParams获取对象,但不填充参数
- Javascript回调函数-如何填充参数
- React-router没有填充参数
- 如何填充参数$cordovaSQLite作为我自己的数组
- Javascript:如何打开一个字段填充参数的表单
- 在不同的页面上使用不同的颜色更改SVG填充参数
- Angular2:路由器未填充参数
- 用文本字段中的字符填充参数