A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 滔哥   /  2013-12-25 11:15  /  174003 人查看  /  9896 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

回帖奖励 +1 技术分

哈哈技术分、、、
回复 使用道具 举报
for 中级黑马 2013-12-27 17:40:04
3762#
光环走起
回复 使用道具 举报
再来一次,,,
回复 使用道具 举报
佛挡杀佛!!!!!!!!
回复 使用道具 举报
开盖有奖,再来一个
回复 使用道具 举报
黑马程序员
回复 使用道具 举报


挖矿咯,大家一起挖矿咯,V5,黑马程序员
回复 使用道具 举报
开盖有奖,再来一个
回复 使用道具 举报
再开盖一次,有奖了
回复 使用道具 举报

回帖奖励 +1 技术分



挖矿咯,大家一起挖矿咯,V5,黑马程序员!!
回复 使用道具 举报

回帖奖励 +1 技术分

黑马程序员
回复 使用道具 举报
黑马程序员
回复 使用道具 举报
黑马程序员
回复 使用道具 举报
for 中级黑马 2013-12-27 17:55:59
3774#
光环走起
回复 使用道具 举报

挖矿咯,大家一起挖矿咯,V5,黑马程序员
回复 使用道具 举报
挖矿挖矿加油
回复 使用道具 举报
黑马程序员
回复 使用道具 举报

回帖奖励 +1 技术分

这个是程序上的概念。 本质上是叫别人做事,传进去的额外信息。  比如,A叫B做事,根据粒度不同,可以理解成A函数调用B函数,或者A类使用B类,或者A组件使用B组件等等。反正就是A叫B做事。  当B做这件事情的时候,自身的需要的信息不够,而A又有。就需要A从外面传进来,或者B做着做着主动向外面申请。对于B来说,一种被动得到信息,一种是主动去得到信息,有人给这两种方式术语,叫信息的push,和信息的pull。  接着,A调用B,A向B传参数。int max(int a, int b); 要使用这函数max, 得到两者最大的值, 外面就要传进来a, b。这个好理解。  再跟着,就来到计算机中比较诡异的地方。也就是代码(code)和数据(data)的统一,这是一个槛,如果不打通这个,很多概念就不清楚。我们常常说计算机程序分成code和data两部分。很多人就会觉得,code是会运行的,是动的,data是给code使用,是静态的,这是两种完全不同的东西。  其实code只是对行为的一种描述,比如有个机器人可以开灯,关灯,扫地。跟着我要机器人开灯,扫地,关灯。如果跟机器人约定好,0表示开灯,1表示关灯,2表示扫地。我发出指令,0 1 2 1 0。跟着就可以控制机器人开灯,扫地,关灯。再约定用二进制表示,两位一个指令,就有一个数字串,0001110100,这个时候0001110100这串数字就描述了机器人的一系列动作,这个就是从一方面理解是code,可以它可以控制机器人的行为。但另一方面,它可以传递,可以记录,可以修改,也就是数据。只要大家都协商好,code就可以编码成data, 将data解释运行的时候,也变成了code。  这个地方扯开了。我自己是不区分code和data的,统一称为信息。那既然int max(int a, int b)中int,double等表示普通data的东西可以传递进去,凭什么表示code的函数就不可以传进去了。有些语言确实是不区分的,它的function(表示code)跟int, double的地位是一样的。这种语言就为函数是第一类值。  但问题是,有些语言是不能存储函数的,不能动态创建函数的,不能动态销毁函数的。(这里函数是已经是广义的了,用来表示代码code)。只能存储一个指向函数的指针,这种语言称为函数是第二类值。  另外有些语言不单可以传递函数,函数里面又用到一些外部信息(包括code, data)。那些语言可以将函数跟函数所用到的信息一起传递存储。这种将函数和它所用的信息作为一个整体,就为闭包。  再次声明,将代码和数据打通,统一起来,是一个槛。过了这个槛,很多难以理解的概念就会清晰很多。比如一些修改自身的程序啊,数据驱动啊,先设计数据再写程序等等。过了这山,眼界就开阔了。  来到这里,其实已经没有什么好说的了。回调函数也就是是A让B做事,B做着做着,信息不够,不知道怎么做了,就再让外面处理。  比如排序,A让B排序,B是会做排序,但排序需要知道哪个比哪个大,这点B自己不知道,就需要A告诉它。而这种判断那个大,本身是一种动作,既然C语言中不可以传进第一值的函数,就设计成传递第二值的函数指针,这个函数指针就是A传向B的信息,用来表示一个行为。这里本来A调用B的,结果B又调用了A告诉它的信息,也就叫callback。  再比如A让B监听系统的某个消息,比如敲了哪个键。跟着B监听到了,但它不知道怎么去处理这个消息,就给外面关心这个消息,又知道怎么去处理这个消息的人去处理,这个处理过程本事是个行为,既然这个语言不可以传递函数,又只能传一个函数指针了。跟着有些人有会引申成,什么注册啊,通知啊等等等。假如B做监听,C, D, E, F, G, H告诉B自己有兴趣知道这消息,那B监听到了就去告诉C,D,E,F,G等人了,这样通知多人了,就叫广播。  其实你理解了,根本不用去关心术语的。术语是别人要告诉你啊,或者你去告诉人啊,使用的一套约定的词语。本质上就个东西,结果会有很多术语的。  跟着再将回调的概念进化,比如某人同时关心A,B,C,D,E,F事件,并且这些事件是一组的,比如敲键盘,鼠标移动,鼠标点击等一组。将一组事件结合起来。在有些语言就变成一个接口,接口有N个函数。有些语言就映射成一个结构,里面放着N个函数指针。跟着就不是将单个函数指针传进去,而是将接口,或者函数指针的结构传进去。这些根据不同的用途,有些人叫它为代理啊,监听者啊,观察者啊等等。  反正语言本身不直接支持某种概念,就用些手段去饶过它呗。 2013-05-22
回复 使用道具 举报
黑马程序员
回复 使用道具 举报
黑马程序员
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马