回调

来源:互联网 发布:打的软件叫车 编辑:程序博客网 时间:2024/06/05 07:30

今天看js异步回调,有点不清楚,上网查了下资料先看看回调是什么。

下图来源于维基百科,用来说明回调。


举个例子,如下图代码:

#include <stdio.h>#include <stdlib.h>int sort_function( const void *a, const void *b);int list[5] = { 54, 21, 11, 67, 22 };int main(void){   int  x;   qsort((void *)list, 5, sizeof(list[0]), sort_function);   for (x = 0; x < 5; x++)      printf("%i\n", list[x]);   return 0;}int sort_function( const void *a, const void *b){   return *(int*)a-*(int*)b;}
主函数外有个sort_function函数,主函数内调用函数sort(  ),而sort()函数接口处又包含sort_function函数指针,。

这里将main()函数和sort_function()看成同一层,将被调函数sort()看成底层。

首先是顶层的主函数调用底层的函数,而后底层的函数又调用了顶层的函数,因此叫它回调,

这里为了完成定制化的功能将传入了一个函数sort_function(),这个函数就是回调函数,这个导入的过程注册。


那么问题来了,在高级语言里函数内是可以定义函数的,因此上面说的顶层调用底层,底层再调用顶层可能不存在。

在函数A内定义函数B和函数C,并调用函数B,而函数B又将函数C作为参数,能说是顶层调用底层,底层再调用顶层吗?

简单点理解回调吧,就是将函数指针或者将函数作为对象传参。

反正这个概念也是别人说的,我目前就是这样理解吧,就是传递函数以便完成一些定制化功能,比如定义一系列的消息处理函数,将这些消息处理函数传递给系统的接口,这样系统就可以针对消息完成一些定制化的处理方式。

至于网上有些说回调是你调用我,我再调用你,这肯定不对。

参考:https://www.zhihu.com/question/19801131

https://www.ibm.com/developerworks/cn/linux/l-callback/

原创粉丝点击