要点:1、回调函数就是那些自己写的,但是不是自己来调,而是给别人来掉的函数。(消息响应函数就可以看成是回调函数,因为是让系统在合适的时候去调用。这不过消息响应函数就是为了处理消息的,所以就拿出来单做一类了。其实本质上就是回调函数。)
2、回调函数,或简称回调,是指通过函数参数传递到其它代码的,某一块可执行代码的引用。回调函数不是由该函数的实现方直接调用,而是在特定的事件或条件发生时由另外的一方调用的,用于对该事件或条件进行响应。这一设计允许了底层代码调用在高层定义的子程序。回调的形式因程序设计语言的不同而不同。(C, C++ and Pascal允许将函数指针作为参数传递给其它函数。其它语言,例如JavaScript,Python,Perl和PHP,允许简单的将函数名作为参数传递。Objective-C中允许利用@selector关键字传递SEL类型的函数名。)
回调允许函数调用者在运行时调整原始函数的行为。因为可以把调用者与被调用者分开,所以调用者不关心谁是被调用者。它只需知道存在一个具有特定原型和限制条件的被调用函数。
栗子🌰:
别人写了一个函数,用来下载你的电话本。保存到一个文件里面。
别人的函数(参数1,参数2)
然后你使用这个函数。每次调用之后,电话本就被保存到指定文件里面了。
使用一段时间你会感觉,只是用这个函数是不错,不过不知道下载的进度啊。
所以你就会要求把进度情况告诉你。
然后他就改进了一下
别人的函数(参数1,参数2,回调函数)
并且告诉你回调函数的格式如下
回调函数(参数1:当前数量,参数2:总数量)
你使用时必须按照这个格式定义一个函数,然后传给他。
如下,别人的函数(参数1,参数2,你写的回调函数名字)
这样,你每次调用别人的函数的时候,你写的那个回调函数就会被调用(如何调用是别人控制的了,你只需要在你的函数里面处理好参数1 2就行了)
当然,很多时候回调是不分彼此的,这里写的别人,和自己,只是为了好理解,意思就是表示2个调用和被调用的关系
来自:https://www.zhihu.com/question/19801131