什么情况下使用回调函数?

时间:2021-02-27 05:34:49
今天在一段函数代码,名称中含有callback字样,
经过询问别人以后才知道那叫回调函数。
我以前在JS代码中从来没有见过这样的函数,
所以不太会使用,请问各位:
什么情况下使用回调函数?
怎样使用回调函数?
都是什么语言有自己的回调函数啊?
回调函数应该是系统调用的吧?
内容是不是需要自己编写啊?
JS中有自己的回调函数吗?必须有吗?

13 个解决方案

#1


所谓回调函数只是一个跟语言无关的概念。说白了就是A调用了B,B在适当的时候又反回去调用A。这样的东西都可以叫做回调函数。从上面也可以看出来,多数时候因为是单线程,A没有必要等B来调用它,因为A在调用完B之后完全可以调用自己需要的操作。所以回调多见于事件驱动机制里。因为A在调用完B之后不知道B什么时候会完成,反应在JS里就是A发出了一个操作B,B是一个AJAX操作,所以A不知道B什么时候会完成。而唯一知道B什么时候完成的当然是B自己了,所以当B完成的时候会通过一个回调函数通知A,自己已经完成了,这时候A才知道该进行下面的操作。如果不这样的话,A就只能不断地询问B是不是已经完成了(就是轮询),可见是效率非常低的,实现也很麻烦。再举个现实中的例子,你说公司需要买一批机器,派了一个人去,你肯定不希望每隔10分钟打电话问一次他买回来没有吧?当然你会希望他买回来的时候告诉你一声。这一声就是回调。
回调通常是在两个不同的线程间需要同步的情况下才出现的,但是很多时候又没有必要用信号量去进行真正的线程同步,因为会很复杂,而且没有必要。所以有了回调这种价格便宜量又足的东西。明白这个概念自己也可以在自己的程序中设计回调,并不一定是系统进行的。至于回调要干的事情,当然是你自己决定了。JS系统的回调只有AJAX的时候有,其他的我还没接触过。

#2


我接触到得JS里面的回调函数都是自己写的,一般是在需要发送ajax请求的时候调用的。

#3


学习学习!!!

#4


给个小例子 啊!!!

#5


楼主要了解下js中的xmlHttpRequest对象。这个就是ajax的核心对象。
http://baike.baidu.com/view/1105115.htm
看完相信你已经有初步了解了。

#6


太感谢各位了!!!呵呵。。。
不过我遇到的是在JS与Flash之间通信的时候,
书上说要想使用JS向Flash发送消息,
或者说使用JS调用Flash中的函数,必须先在
Flash中注册一个回调函数,所以我有此一问。
谁写过JS与Flash之间通信啊?
讲讲过程, 是必须先在
Flash中注册一个回调函数吗?

#7



//调用JS方法并传入参数OK
ExternalInterface.call("jsFunction",'OK');
// actionscript --> javascript

//回调方法write,并调用writeln AS方法 
ExternalInterface.addCallback("write",writeln);
//javascript --> actionscript
private function writeln(contents:String):void {
try {
writeUTFBytes(contents);
flush();
} catch (e:IOError) {
trace(e);
}
}



var jsFunction = function(str){
   alert(str);//alert ok
}
 document.getElementById('swfid').write('contents');

#8


ExternalInterface.addCallback("write",writeln);

此方法相当于注册,暴露接口让JS调用

#9


引用 1 楼 zhangyaoxing 的回复:
所谓回调函数只是一个跟语言无关的概念。说白了就是A调用了B,B在适当的时候又反回去调用A。这样的东西都可以叫做回调函数。从上面也可以看出来,多数时候因为是单线程,A没有必要等B来调用它,因为A在调用完B之后完全可以调用自己需要的操作。所以回调多见于事件驱动机制里。因为A在调用完B之后不知道B什么时候会完成,反应在JS里就是A发出了一个操作B,B是一个AJAX操作,所以A不知道B什么时候会完成。而唯一知道B什么时候完成的当然是B自己了,所以当B完成的时候会通过一个回调函数通知A,自己已经完成了,这时候A才知道该进行下面的操作。如果不这样的话,A就只能不断地询问B是不是已经完成了(就是轮询),可见是效率非常低的,实现也很麻烦。再举个现实中的例子,你说公司需要买一批机器,派了一个人去,你肯定不希望每隔10分钟打电话问一次他买回来没有吧?当然你会希望他买回来的时候告诉你一声。这一声就是回调。
回调通常是在两个不同的线程间需要同步的情况下才出现的,但是很多时候又没有必要用信号量去进行真正的线程同步,因为会很复杂,而且没有必要。所以有了回调这种价格便宜量又足的东西。明白这个概念自己也可以在自己的程序中设计回调,并不一定是系统进行的。至于回调要干的事情,当然是你自己决定了。JS系统的回调只有AJAX的时候有,其他的我还没接触过。

说的真好,以前写异步通信的时候要用。  什么情况下使用回调函数?

#10


谢谢了,O(∩_∩)O~

#11


Flash我是外行了,猜测可能是需要调用某个Flash的API,这个API会生成一个JS函数,这样JS就可以调用到这个函数了。而调用这个函数的效果则是会映射到一个Flash函数。这样对于JS来说调用这个函数就相当于调用了Flash的某个功能,以此达到访问Flash的目的。
纯属猜测,等熟悉Flash的人来解答吧

#12


学习  学习  顶     顶    顶 
以前都不这么明白回调

#1


所谓回调函数只是一个跟语言无关的概念。说白了就是A调用了B,B在适当的时候又反回去调用A。这样的东西都可以叫做回调函数。从上面也可以看出来,多数时候因为是单线程,A没有必要等B来调用它,因为A在调用完B之后完全可以调用自己需要的操作。所以回调多见于事件驱动机制里。因为A在调用完B之后不知道B什么时候会完成,反应在JS里就是A发出了一个操作B,B是一个AJAX操作,所以A不知道B什么时候会完成。而唯一知道B什么时候完成的当然是B自己了,所以当B完成的时候会通过一个回调函数通知A,自己已经完成了,这时候A才知道该进行下面的操作。如果不这样的话,A就只能不断地询问B是不是已经完成了(就是轮询),可见是效率非常低的,实现也很麻烦。再举个现实中的例子,你说公司需要买一批机器,派了一个人去,你肯定不希望每隔10分钟打电话问一次他买回来没有吧?当然你会希望他买回来的时候告诉你一声。这一声就是回调。
回调通常是在两个不同的线程间需要同步的情况下才出现的,但是很多时候又没有必要用信号量去进行真正的线程同步,因为会很复杂,而且没有必要。所以有了回调这种价格便宜量又足的东西。明白这个概念自己也可以在自己的程序中设计回调,并不一定是系统进行的。至于回调要干的事情,当然是你自己决定了。JS系统的回调只有AJAX的时候有,其他的我还没接触过。

#2


我接触到得JS里面的回调函数都是自己写的,一般是在需要发送ajax请求的时候调用的。

#3


学习学习!!!

#4


给个小例子 啊!!!

#5


楼主要了解下js中的xmlHttpRequest对象。这个就是ajax的核心对象。
http://baike.baidu.com/view/1105115.htm
看完相信你已经有初步了解了。

#6


太感谢各位了!!!呵呵。。。
不过我遇到的是在JS与Flash之间通信的时候,
书上说要想使用JS向Flash发送消息,
或者说使用JS调用Flash中的函数,必须先在
Flash中注册一个回调函数,所以我有此一问。
谁写过JS与Flash之间通信啊?
讲讲过程, 是必须先在
Flash中注册一个回调函数吗?

#7



//调用JS方法并传入参数OK
ExternalInterface.call("jsFunction",'OK');
// actionscript --> javascript

//回调方法write,并调用writeln AS方法 
ExternalInterface.addCallback("write",writeln);
//javascript --> actionscript
private function writeln(contents:String):void {
try {
writeUTFBytes(contents);
flush();
} catch (e:IOError) {
trace(e);
}
}



var jsFunction = function(str){
   alert(str);//alert ok
}
 document.getElementById('swfid').write('contents');

#8


ExternalInterface.addCallback("write",writeln);

此方法相当于注册,暴露接口让JS调用

#9


引用 1 楼 zhangyaoxing 的回复:
所谓回调函数只是一个跟语言无关的概念。说白了就是A调用了B,B在适当的时候又反回去调用A。这样的东西都可以叫做回调函数。从上面也可以看出来,多数时候因为是单线程,A没有必要等B来调用它,因为A在调用完B之后完全可以调用自己需要的操作。所以回调多见于事件驱动机制里。因为A在调用完B之后不知道B什么时候会完成,反应在JS里就是A发出了一个操作B,B是一个AJAX操作,所以A不知道B什么时候会完成。而唯一知道B什么时候完成的当然是B自己了,所以当B完成的时候会通过一个回调函数通知A,自己已经完成了,这时候A才知道该进行下面的操作。如果不这样的话,A就只能不断地询问B是不是已经完成了(就是轮询),可见是效率非常低的,实现也很麻烦。再举个现实中的例子,你说公司需要买一批机器,派了一个人去,你肯定不希望每隔10分钟打电话问一次他买回来没有吧?当然你会希望他买回来的时候告诉你一声。这一声就是回调。
回调通常是在两个不同的线程间需要同步的情况下才出现的,但是很多时候又没有必要用信号量去进行真正的线程同步,因为会很复杂,而且没有必要。所以有了回调这种价格便宜量又足的东西。明白这个概念自己也可以在自己的程序中设计回调,并不一定是系统进行的。至于回调要干的事情,当然是你自己决定了。JS系统的回调只有AJAX的时候有,其他的我还没接触过。

说的真好,以前写异步通信的时候要用。  什么情况下使用回调函数?

#10


谢谢了,O(∩_∩)O~

#11


Flash我是外行了,猜测可能是需要调用某个Flash的API,这个API会生成一个JS函数,这样JS就可以调用到这个函数了。而调用这个函数的效果则是会映射到一个Flash函数。这样对于JS来说调用这个函数就相当于调用了Flash的某个功能,以此达到访问Flash的目的。
纯属猜测,等熟悉Flash的人来解答吧

#12


学习  学习  顶     顶    顶 
以前都不这么明白回调

#13