JS中的回调函数:

1.概念:

函数a有一个参数,这个参数是个函数b,当函数a执行完以后执行函数b,那么这个过程就叫回调,即把函数作为参数传入到另一个函数中,这个函数就是所谓的回调函数。

2.举例:

某个项目的 A 层和 B 层是由不同的人员协同完成,A 层负责功能 funA,B 层负责 funcB,当 B 层要用到某个模块的数据,于是他对 A 层人员说,我需要你们提供满足某种需求的数据, 你给我提供一个接口,A 层的人员说: 我给你提供数据,怎么展示和处理则是 B 的事情,当然 B 层不可能为你每个需求都提供一个数据接口,B 给 A 提供一个通过的接口,B 得到数据,然后 B 写函数去展示。即,你需要和其他人合作,别人提供数据,而你不需要关注别人获取或者构建数据的方式方法。你只要对这个拿到的数据进行操作。这时候就需要使用回调函数,因此,回调本质上是一种设计模式,并且 jQuery(包括其他框架)的设计原则遵循了这个模式。

@1:一个同步(阻塞)中使用回调的例子,目的是在 func1 代码执行完成后执行 func2。

 var func1=function(callback){  

     //do something.  

     (callback && typeof(callback) === "function") && callback();  

 }
func1(func2); var func2=function(){ }

@2:异步回调的例子:

 $(document).ready(callback);
$.ajax({ url: "test.html", context: document.body }).done(function() { $(this).addClass("done"); }).fail(function() { alert("error"); }).always(function() { alert("complete"); });

下面的比喻很生动有趣:

你有事去隔壁寝室找同学,发现人不在,你怎么办呢?

方法 1,每隔几分钟再去趟隔壁寝室,看人在不

方法 2,拜托与他同寝室的人,看到他回来时叫一下你

前者是轮询,后者是回调。

C++中的回调函数

1.概念:

从概念上讲,回调函数与普通函数的本质在于:调用者的不同。普通函数由程序员代码调用,而回调函数由操作系统在适当的时间调用。   
回调函数主要用于处各种事件和处理。由于WINDOWS系统中存在大量程序员事先不可知的事件,例如鼠标的单击,程序员事先无法得知终端用户何时会发出此动作,因此只能:  
A定义事件的处理逻辑,与普通函数的编程一样;  
B告之操作系统自己的处理逻辑,即通知操作系统函数指针;VC/VB等现代编程语言通过事件编程机制隐藏了这一步;  
C操作系统在事件出现时,调用指定的函数(回调函数的概念)处理,这一步完全由系统负责。   
回调函数在各种操作系统中普遍存在,是现代操作系统为程序员提供处理异步事件的基本机制之一,在不同的系统中的具体实现方式各不相同;请参阅随机文档Callback 函数实质就是你实现这个函数,由操作系统调用。而一般的情况下是,操作系统提供函数由你来调用的。回调函数实际上就起到了消息循环的作用,因为在sdk中只有通过回调函数来发送各自的处理消息

2.定义:

回调函数就是一个通过函数指针调用的函数. 如果你把函数的指针(地址)作为参数传递给另一个函数, 当这个指针被用为调用它所指向的函数时,我们就说这是回调函数.回调函数不是由该函数的实现方直接调用,而是在特定的事件或条件发生时由另外一方调用的,用于对该事件或条件进行响应.
 回调函数实现的机制是 : 
(1) 定义一个回调函数;
(2) 提供函数实现的一方在初始化的时候,将回调函数的函数指针注册给调用者;
(3) 当特定的事件或条件发生的时候,调用者使用函数指针调用回调函数对事件进行处理.
使用回调函数,可以把调用者与被调用者分开.调用者不关心谁是被调用者,所有它需知道的,只是存在一个具有某种特定原型、某些限制条件(如返回值为int)的被调用函数.
3.举例:
         去宾馆后,向前台告知明天六点叫我起床,这句话说明了两个Function 1.请求叫醒服务 2.宾馆记录下来到具体时间点叫醒自己。 用代码实现这里的逻辑如下: 1.首先需要一个回调函数的接口,双方的一种约定。 2.Guest和Hotel的实体类,这里Guest需要Hotel的引用,因为服务是 Hotel提供的。其次开启一个单独的线程,来表示双方各自工作的关系。同样Hotel只需要一个具体服务的引用(Callback接口)和具体内容(这里是时间) 
@1接口:Callback
package com.callback.demo;

public interface Callback {
public void callback(String result);
}

@2具体实现类Guest

 package com.callback.demo;

 public class Guest implements Callback {
Hotel hotel;
public Guest(Hotel hotel) {
this.hotel=hotel;
}
//客人的告诉宾馆叫醒服务(时间)
public void awake(String date ) {
System.out.println("走到前台。。。要求服务");
//宾馆登记
new Thread(new Runnable() { @Override
public void run() {
// TODO Auto-generated method stub
hotel.recordAndWake(Guest.this, date);
} }) { }.start();
//等待服务办理
System.out.println("等待服务办理");
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
doOtherThing(); }
//长夜慢慢 无心睡眠
void doOtherThing() {
System.out.println("吃吃宵夜");
System.out.println("睡觉了,等待叫醒");
} @Override
public void callback(String result) {
// TODO Auto-generated method stub
System.out.println("hotel=============叫醒服务"+result);
} }

Hotel

 package com.callback.demo;

 public class Hotel {
//提供的服务 需要服务对象 以及服务内容
public void recordAndWake(Callback callback,String date) {
System.out.println("hotel记录时间为====="+date);
//模拟长夜慢慢
try {
Thread.sleep(5000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} date="时间到了。。。。客人";
callback.callback(date);
}
}

test

 package com.callback.demo;

 public class TestCase {

     public static void main(String[] args) {
// TODO Auto-generated method stub
Hotel hotel = new Hotel();
Guest guest = new Guest(hotel);
guest.awake("明天早上6.00"); } }
 

JS之Callback function(回调函数)的更多相关文章

  1. JavaScript callback function 回调函数的理解

    来源于:http://mao.li/javascript/javascript-callback-function/ 看到segmentfault上的这个问题 JavaScript 回调函数怎么理解, ...

  2. callback function(回调函数) - 术语

    回调函数(CallBack Function)的定义: [todo] 下面是callback的一个场景,linux内核.LwIP里也有使用callback funcs.

  3. Node.js自学笔记之回调函数

    写在前面:如果你是一个前端程序员,你不懂得像PHP.Python或Ruby等动态编程语言,然后你想创建自己的服务,那么Node.js是一个非常好的选择.这段时间对node.js进行了简单的学习,在这里 ...

  4. (C/C++) Callback Function 回调(diao)函数

    原文: http://www.codeguru.com/cpp/cpp/cpp_mfc/callbacks/article.php/c10557/Callback-Functions-Tutorial ...

  5. 动态加载JS,并执行回调函数

    有些时候我们需要动态的加载一些JS,并在JS加载完成后执行一些回调函数. var loadscript = { $$: function (id) { return document.getEleme ...

  6. Node.js系列基础学习-----回调函数,异步

    Node.js基础学习 Node.js回调函数 Node.js异步编程的直接体现就是回调,异步编程依托回调来实现,但不是异步.回调函数在完成任务后就会被调用,Node有很多的回调函数,其所有的API都 ...

  7. JavaScript——callback(回调函数

    1.回调函数定义 回调函数就是一个通过函数指针调用的函数.如果你把函数的指针(地址)作为参数传递给另一个函数,当这个指针被用为调用它所指向的函数时,我们就说这是回调函数.回调函数不是由该函数的实现方直 ...

  8. JS replace可以接受回调函数

    这是js最鲜为人知的秘密之一,v 1.3首次引入.大部分情况下repalce的使用情况如下: '10 12 13 40 50'.replace(/\d+/g,'*');//用 * 替换所有的数字 这是 ...

  9. Node.js学习 - CallBack Function

    Node.js异步编程的直接体现就是回调,Node使用了大量的回调函数,其所有的API都支持回调. 阻塞代码实例(同步) var fs = require("fs"); var d ...

随机推荐

  1. 0xc0000005:读取位置时发生访问冲突

    这是空指针,比如: A* a=NULL; a->fun();//会提示标题错误,因为a没有分配空间

  2. 【前端】纯html+css+javascript实现楼层跳跃式的页面布局

    实现效果演示: 实现代码及注释: <!DOCTYPE html> <html> <head> <title>楼层跳跃式的页面布局</title&g ...

  3. Wireshark分析RabbitMQ

    消费者Code: using System; using System.Collections.Generic; using System.Linq; using System.Text; using ...

  4. HDU 2841 Visible Trees(容斥)题解

    题意:有一块(1,1)到(m,n)的地,从(0,0)看能看到几块(如果两块地到看的地方三点一线,后面的地都看不到). 思路:一开始是想不到容斥...后来发现被遮住的地都有一个特点,若(a,b)有gcd ...

  5. LOJ#2170. 「POI2011」木棍 Sticks

    题目链接 题意就是给你一堆线段,然后线段有长度和颜色,让你选三条组成一个三角形,这三条线段颜色不能一样 题解: 做法:贪心 首先按照长度给这些线段排序一遍 然后贪心的去选,对于已经选出来同种颜色的,就 ...

  6. Java-master(github)教材整理

    helloworld class HelloWorld { public static void main(String[] args) { System.out.println("hell ...

  7. java自学入门心得体会 从环境配置开始

    java —— 一种可以撰写跨平台应用软件的面向对象的程序设计语言. 很多教程里都要概述java语言的诞生发明.其实像图灵的”图灵机“和”图灵测试“一样,当初的java并不是这样. 是用来操控一些电冰 ...

  8. 机器学习-数据可视化神器matplotlib学习之路(二)

    之前学习了matplotlib的一些基本画图方法(查看上一节),这次主要是学习在图中加一些文字和其其它有趣的东西. 先来个最简单的图 from matplotlib import pyplot as ...

  9. Win7下怎么设置让远程桌面连接记住密码下次登录不需再输入

    远程桌面连接功能想必大家都不会陌生吧,特别是使用VPS服务器的用户们经常会用到,为了服务器的安全每次都会把密码设置的很复制,但是这样也有一个麻烦,就是每次要桌面远程连接的时候都要输入这么复杂的密码,很 ...

  10. SpringMVC是如何逐步简化Servlet的编程的

    转自:https://www.cnblogs.com/winterfells/p/8476759.html Servlet和JSP是开发java Web应用程序的两种基本技术,Spring MVC是S ...