我在一个github的代码上看到有命名为Callback的函数。
我今天之前对回调函数的概念都不清除,回调函数是什么?如何使用以及有什么优势?带着这三个问题。利用费曼学习法的精神,我把我理解的概念整理复盘,加深印象。
什么是编程类型?
首先,在知道回调函数的概念前,需要清楚另外一个编程类型的概念。
编程分为两种类型:系统编程以及应用编程。
系统编程的对象是API,编程人员使用库进行开发,库是开发的底层结构,是开发人员利用的工具和服务。系统编程基于库的编程。
而应用编程是程序员开发应用需要编写的程序,编写的程序调用库中的函数暴露出的接口,实现编程人员的功能需求。
明显看出上述可以分成两个不同的抽象层次,底层我称之为库层,上一层称为应用层。
什么是回调函数?
回调函数在应用层,作为API的参数被库层调用。
这里可以举一个例子说明一下这之间的管理。
酒店一般会为客户提供叫醒服务。但是客户可以选择如何被叫醒。可以是服务员到时敲门,可以是电话叫醒,可以是用一桶水泼醒,这几种方式最为客户的意愿
告诉酒店。
很明显,酒店的叫醒服务是库层的API服务,这里换个说法,叫做中间函数。而客户的意愿是回调函数。
A-B还是A-b-c?
网上很多说法是中间函数调用了回调函数,是A-b关系。但是实际上回调函数是A-b-c的关系。
我们不要忽略了调用中间函数的对象,我把它称为初始函数。
回调函数和初始函数处于同一抽象层------应用层。
回调函数的流程是:
(1)初始函数调用了中间函数,并决定调用中间函数的参数--回调函数对象。
(2)中间函数执行过程中调用了回调函数。
初始函数也有它的作用。
(1)阻塞型回调函数:在初始函数返回前调用回调函数
(2)延迟型型函数:在初始函数返回后调用回调函数
延迟型回调函数一般是多线程的。
回调函数的优势?
回调函数可以改变中间函数的内容以及结果,非常灵活。