1今天说一下我对回调函数的认识和理解.
- var addEvent = (function () {
- if (document.addEventListener) {
- return function (type, element, fun) {
- element.addEventListener(type, fun, false);
- }
- }
- else if (document.attachEvent) {
- return function (type, element, fun) {
- element.attachEvent('on' + type, fun);
- }
- }
- else {
- return function (type, element, fun) {
- element['on' + type] = fun;
- }
- }
- })();
- var removeEvent = (function () {
- if (document.removeEventListener) {
- return function (type, element, fun) {
- element.removeEventListener(type, fun, false);
- }
- }
- else if (document.detachEvent) {
- return function (type, element, fun) {
- element.detachEvent('on' + type, fun);
- }
- }
- else {
- return function (type, element, fun) {
- element['on' + type] = null;
- }
- }
- })();
其实我们收到短信,手机铃声响起就是一个回调函数
- var ring= function () {
- //手机铃声响起或手机震动
- };
- addEvent('收到短信', 手机, ring);
我们读小学时,午休会让班长(监听器)巡逻,看哪个小伙伴(事件目标)睡觉不老实(比如说话打闹,这是事件),一旦发现就通知班主任(事件处理程序).
这里涉及到4个概念:
(1)监听器:负责不断地检查各个元素,看是否有事件发生,我们可以先简单地理解为轮询;
(2)事件:比如小伙伴挠别人脚丫,这个按钮被点击了.
(3)事件目标:事件发生在谁身上,这个按钮被点击了,那么这个按钮就是target
(4)事件处理程序:当事情发生时该怎么办呢?交给谁处理呢?比如班长发现小明捣乱不让同桌睡觉,就会通知班主任(事件处理程序)处理.
回调函数就相当于事件处理程序.上述代码中的ring就是回调函数,也是事件处理程序.
- <html>
- <head lang="en">
- <meta charset="UTF-8">
- <title></title>
- <script type="application/javascript">
- var sayHello= function () {
- alert("找我干嘛");
- }
- </script>
- </head>
- <body>
- <div id="outDiv" style="width: 200px;height: 50px;background-color: #9a9afb">
- <input type="button" id="myBtn" onclick="sayHello();" value="点我啊"/>
- </div>
- </body>
- </html>
上例中,sayHello就是回调函数
XMLHttpRequest的onreadystatechange也是回调函数
Java中有没有回调函数呢?没有!js中可以把函数当做变量来传递,但是java中不能,java中是通过接口来实现监听器模式的.
- delButton_1 = new JButton("删除注释");
- delButton_1.addActionListener(new ActionListener() {
- @Override
- public void actionPerformed(ActionEvent e) {
- String domain=domainTextField1.getText();//Constant2.HOSTS_PATH
- opHosts(domain, false);
- }
- });
如上java 代码,给按钮的点击事件增加了一个事件处理程序,我们传过去的是一个接口,当事件(用户单击)发生时就会执行actionPerformed 方法,而不是执行其他方法.也就是说actionPerformed 相当于一个事件处理程序,具体怎么反应,我们可以实现这个接口,来做具体的响应.
参考:http://blog.csdn.net/hw1287789687/article/details/45876843
http://blog.csdn.net/hw1287789687/article/details/45877693