回调函数(callback)是什么?

一个常见的定义:由自己定义、由系统调用的函数,称为回调函数。
上层/底层的概念:系统提供的,通常称为底层,如Windows SDK的API。自己写的代码,称为上层。一般是上层调用下层,如调用API监视键盘。Callback的特殊之处是,你写的函数,由下层来调用。
为什么会理解困难:我通常把这原因归为,翻译的“回调”,太烂。语言阻碍了理解。

一种应用场景:

你是上层,我是下层。我写函数,你调用。注意,现在我写了一个函数,里面有一个死循环。当然不用担心,这个死循环是从摄像头抓帧的,你随时可以按Esc退出。
我对抓到的每帧,检测图像里目标。这里假设目标是草莓。所以,问题简化成:【我摘草莓,你吃草莓,我为你服务(调用)】。

刚开始,你拿到草莓直接鲜吃,所以,把草莓交给【吃草莓】接口;
后来,你吃不完,想用草莓做酱,所以,把草莓交给【草莓酱】接口;
再后来,你想把草莓做沙拉,所以,把草莓传给【做沙拉】接口;
……

两个问题:
1. 你的需求经常变化。
2. 别人可能用这个摘草莓的接口。

所以,大家决定商量一下,你别叫(调用)我了,我叫(调用)你吧。
把你的各种接口交(传递)给我,我摘到草莓(预处理)后,再调你的接口。

所以,事情变成了:原来,我在下你在上,是通常的传教士;后来觉得麻烦,
我在上,你在下,变成了观音坐莲。这个特殊,叫做Callback。

最后:
如果你也遇到过这种死循环的接口,你会发现,其实传教士根本做不成。因
为你一旦调用我,我就停不下来了……如何把摘到的草莓扔给你?除了Callback,
就得是内存共享之类。

本来是很简单的理解,写出来有点多。照顾非程序员人群,写的更多。总得来说,

能问这个问题,说明你还没入门,目前这样理解,够了。


from 知乎

posted @ 2013-09-15 23:57  N3verL4nd  阅读(308)  评论(0编辑  收藏  举报