回调函数的参数传递_理解回调callback

总是碰到这玩意,没有正经理解过,一知半解的,这次正经理解下。先祭出大图:

24ecd7f0cdbd990c7d9641e025671f1e.png

刚开始看觉得有点蒙b,后来理解了明白了,这个主要是为了说明分层,说明回调的作用是解耦。回调与主函数在同一层,调用回调的库函数在下一层,那么我们可以在不修改库函数的情况下,通过改变callback来实现不同的功能。看下面的例子:

#include<stdio.h>

#include<softwareLib.h> // 包含Library Function所在读得Software library库的头文件

int Callback() // Callback Function

{

// TODO

return 0;

}

int main() // Main program

{

// TODO

Library(Callback);

// TODO

return 0;

}

对应上图,在回调中,主程序把回调函数作为参数传入库函数,这样,只要改变传入库函数的参数,那么就可以实现不同的功能,而完全不必修改库函数的实现,这就是解耦。而且,主函数和回调函数是在同一层,而库函数在另外一层,假设库函数不可见,我们修改不了库函数的代码,但仍然可以通过修改回调函数来实现不同的功能。这里,若将主函数main(),库函数Library()回调Callback()看做F1,F2,F3,则可以理解为:

F1调用F2的时候,F1通过给F2传递另外一个函数F3的指针作为F2的参数,在执行F2的过程中,F2调用了F3,这个动作就叫做回调callback,先被当做指针传入F2,后又被F2调用的函数F3,就是回调函数。”A callback is any function that is called by another function which takes the first function as a parameter”

回调函数其实就是函数指针的一种用法。

回调函数同样可以有自己的参数,只要通过给调用函数增加参数就可以实现回调函数的参数传递。

上面对于回调的理解是来自这里:C 语言回调函数详解 | 菜鸟教程,亲们也可以去看原文。

回调还有一个好处就是可以解决很多耗时的动作,而不需要主程序挂起,等待回调执行完。看下面的例子:

//定义主函数,回调函数作为参数
function A(callback) {
callback();
console.log('我是主函数');
}
//定义回调函数
function B(){
setTimeout("console.log('我是回调函数')", 3000);//模仿耗时操作
}
//调用主函数,将函数B传进去
A(B);
//输出结果
我是主函数
我是回调函数

定义主函数的时候,我们让代码先去执行callback()回调函数,但输出结果却是后输出回调函数的内容。这就说明了主函数不用等待回调函数执行完,可以接着执行自己的代码。所以一般回调函数都用在耗时操作上面。比如ajax请求,比如处理文件等。当然,这种实现实际也可以理解为解耦。

这一段原文来自通俗理解“回调函数”_angciyu的博客-CSDN博客_什么是回调函数。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值