看了蒙秀泽发表的Java回调机制,做个总结,回调必然用到接口,他所谓的回调机制就是:在A类中定义了一个方法,这个方法中用到了一个接口和该接口中的抽象方法,但是抽象方法没有具体的实现,需要B类去实现,B类实现该方法后,它本身不会去调用该方法,而是传递给A,供A去调用,这种机制被称为回调。
Teacher类中定义了一个提问方法,这个方法用到了Student接口和该接口中的解决问题方法,但是抽象方法没有具体的实现,需要Ricky类去实现,
Ricky类实现该方法后 ,它本身不会再去调用方法,而是传递给Teacher类,供Teacher类去调用。
我理解的回调函数(以JS为例):是一个函数的调用过程,一个函数调用另一个函数
中文例子:你去一个杂货店买米,但是米没有了,于是你留下了电话号码说有货了就给我打电话,过了几天杂货店有货了,然后店员给你打电话,你就去取货回来了。
其中,电话号码就是一个回调函数,留下电话号码叫登记回调函数,杂货店有货了叫做回调函数关联的事件,店员给你打电话叫做调用回调函数,你去取货回来叫做回调函数的响应。
比如函数a有一个参数是函数b,如果函数a执行完了又执行函数b,这个过程就叫做回调。
至于为什么一定要以参数形式传过去吗,我不可以直接在函数a里面调用函数b吗?确实可以。但是如果你直接在函数a里调用函数b的话,那么这个回调函数就被限制死了,就失去了变量的灵活性。
使用函数作为参数的好处就是:当你a(b)的时候b为回调函数,当你使用a(c)的时候c为回调函数。
例:
<html>
<head>
<title>回调函数(callback)</title>
<script language="javascript" type="text/javascript">
function a(callback){
alert("我是parent函数a");
alert("开始调用回调函数");
callback();
}
function b(){
alert("我是回调函数b");
}
function c(){
alert("我是回调函数c");
}
function test(){
a(b);
a(c);
}
</script>
</head>
<body>
<h1>学习js回调函数</h1>
<input type="button" value="callback" onClick=test() />
<p>应该能看到调用了两个回调函数,先调用a函数,然后调用b回调函数,调用a函数,然后再调用c回调函数</p>
</body>
</html>