关于回调,在网上有很多的说法,大多解释什么是“回调”,以及回调的作用,一般从异步调用或者流程控制多态等应用角度进行说明。所有我们来聊点其它的,说说在技术层面的事。

首先,来看一下普通函数和回调函数的区别。

普通函数的参数是其它的基本类型或者引用类型。

回调函数的参数除了其它的基本类型或者引用类型,还必须有一个调用这个函数的引用类型作为参数。

所以,区分普通函数和回调函数的方式就是看是否包含了一个调用这个函数的引用类型的参数。

这个特殊的参数会带来什么样的改变?

唯一的变化就是,可以在回调函数里面通过这个特殊参数调用“原始类(调用回调函数的方法锁所在的类)”的所有方法。

那么,这有什么用?

假设如下场景:

有一个类A,A当中有1,2,3,4,5,6六个方法。本来的执行顺序是1,2,3,4,5,6。这时在执行到3的时候调用了B的某个回调方法,这个回调方法最后指定调用A的方法6,这时4,5实际是没有执行的。

另外一个场景:

同样一个类A,A当中有1,2,3,4,5,6六个方法。在执行到3的时候调用了B的某个回调方法,这个回调方法根据运行结果的不同分别调用A的4,5,6。

所以,所谓回调,就是提供了一种调用“对回调函数进行调用的类”的方式。这种方式能够一定程度上改变业务的流程。