回调函数的处理逻辑理解:所谓的回调函数处理逻辑,其实就是先将回调函数的代码 冻结(或者理解为闲置),接着将这个回调函数的代码放到回调函数管理器的队列里面。
  
  待回调函数被触发调用的时候,对应的回调函数的代码才会从管理器队列取出来并自动执行(激活回调函数的代码),实现异步的编程效果。
  
  不过,对于一些必须要等回调函数执行完毕才可以确定的动作,实际上,就是会掉入一个层层回调的局面了。这点也是回调函数的复杂的地方!
  
  换句话说,只要您要获取的值是要被回调才确定的,那接下来的所有代码都必须用回调的方式来编写,层层嵌套。
  
  以百度提问的一个例子简单说明:问题:js 回调函数问题的执行结果想作为返回值{});}这个函数的目的是返回接受到的数据(data),但data值在一个回调函数里面,总是先执行return ,再执行回调函数,因此返回值总是undefined,有什么办法可以解决吗?
  
  解决办法:建议改变你的思维方式,将你的函数 receive 也改成回调式的:});}然后,别的地方要调用receive函数,则将这个函数获取的值之后的所有动作都封装在回调函数callback里面。
  
  例如://这里下面的代码都可以获取data了。
  
  的处理。。。
  
  });关于回调函数的另外一个更加形象的说法:上下文:www.ycyc66.cn假设A函数调用B函数(B函数是异步式的),调用函数A是父函数,被调用的函数B是子函数。
  
  回调函数例子:父亲让儿子去做一个事情,完成之后会给一个www.zgktv.cn 红包(给儿子)。然后父亲立刻去拉屎了。
  
  分析例子:首先,事情必须要完成之后才可以给红包。另外,红包的钱当然是父亲给,儿子只需要在完成之后,自己拆开红包即可。当然,儿子并不用知道父亲会给多少钱。
  
  很简单吧?其实回调函数也就是这样子的思路。
  
  父亲让儿子去做一个事情-->父亲函数调用儿子的函数方法。这个儿子的函数方法是异步的,并不会影响父亲的下一步动作(拉屎)。
  
  红包-->回调函数的名称。也就是callback名称。儿子只需要确定拆开它(执行它)即可。至于里面是什么,有多少钱,儿子管不了,由父亲决定。
  
  红包里面的钱-->可以理解为回调函数所执行的代码段。这个当然是由父亲提供!
  
  儿子完成之后才可以拆红包-->儿子函数完成之后,才会调用父亲提供的一个回调函数(也就是拆红包,数钱)。
  
  另外一个角度的形象理解:回调函数给人感觉更加符合实际。反正要什么,就调用对应的函数获取信息。
  
  等信息获取之后,还想做什么事情(例如完成之后要主动通知我),就可以将逻辑自己写入到回调函数里面,让被调用的函数自动执行该回调函数的代码,完成整个过程!
  
  备注:一定需要注意的是,函数如果是异步的,则整个代码都是异步执行。并不会影响主调用的函数的代码的执行顺序。这就是所谓的异步!
  
  现在问题来了,特别是一些嵌套的回调函数,如何理解呢?
  
  现在让我们理解一下所谓www.yyzx66.cn的嵌套的异步回调函数。
  
  简单理解方法:主函数的代码实际上还是按照顺序执行的。
  
  只要是封装在回调函数里面的代码,都是要等待最深层的回调函数执行之后,才会逐一执行前一层的回调函数的代码!
  
  另外一个理解:我不需要知道你是怎么做的,你只需要做好之后告诉我,并且告诉我结果,即可。我只要结果!
  
  如果是要等到知道结果才可以继续做的事情,则就是要写在等待别人告诉我之后才可以做的事情列表里面(回调函数的事情);如果是别的事情,例如拉屎拉尿什么的,立刻就去做,无需等待!
  
  举个例子:我向要二级供应商要2块镀膜的建筑玻璃。我不需要知道这个玻璃怎么制作的,玻璃怎么到一级供应商的,怎么到二级供应商的。
  
  反正你二级供应商能提供给我要求的玻璃就可以了,提供之后要告诉我是多少价格的,好让我准备付款给你。
  
  -->需要注意的是,我收到了建筑玻璃,我才可以做安装玻璃等等的动作。
  
  但是,拉屎拉尿什么的,我想什么时候做就什么时候做,和购买玻璃并没什么关系。
  
  其实上面的例子就是一个嵌套的回调函数。
  
  制造过程函数://接到订单,也要检查数量和类型。有些类型可能无法生产!
  
  //根据qty数量和type类型来制造需要的玻璃//要经过很多道工序的生产。。。
  
  //做完之后,就调用回调函数,通知已经制造好啦!可以来拿货。当然要收钱啊。就是提供价格给调用者(批量出厂的价格)。
  
  元}一级供应商函数://接到订单,也要重复做检查数量和类型。
  
  //向工厂订货。要的数量和类型是需要指定的。一级供应商不需要知道怎么制造的,只需要通知工厂要货即可//工厂制造完毕,接到工厂的报价之后,这里一级供应商当然要赚钱,所以要加价10%//执行父亲提供的回调函数代码,并且通知一级供应商提供的价格是多少(主动提供回调函数的参数)。
  
  });}二级供应商函数://接到订单,接着检查数量和类型是否正确。是否可以生产这种类型的玻璃。
  
  //二级供应商不需要知道货是哪里拿的,只需要通知一级供应商要货即可//接着向一级供应商订货。要的数量和类型是需要指定的//货到,接到一级供应商的报价之后,这里二级供应商当然要赚钱,所以要加价20%//执行对外的回调函数,并且通知用户,它提供的价格是多少。
  
  });}用户函数:用户是最终的消费者。
  
  //用户购买玻璃的函数方法://核对数量是否正确,玻璃类型是否是需要的。
  
  //用户向二级供应商拿货。需要注意的是,到货之后就可以进行安装等动作。都写在callback里面。
  
  调用二级供应商的接口。并且写好回调函数,知道价格之后做什么。
  
  //这里写的是玻璃到货之后的执行的动作。可能是10天之后才执行的。
  
  用户收货用户检查货物质量用户付款这里执行一个回调函数,可以是安装玻璃,甚至可以送给别人等等。由调用者决定做什么事情。
  
  });},吃饭拉屎}基于上面所定义的函数方法,模拟一个现实的例子:用户早上吃饭,中午买玻璃,下买玻璃的订单之后,接着拉个屎,再睡觉。
  
  试想一下,如果要等到玻璃来到之后才可以拉屎,那岂不是被憋死了。
  
  ----程序处理过程:吃饭();//买玻璃镀膜建筑玻璃安装玻璃();});拉屎();//由于买玻璃是异步函数,所以,这里发出买玻璃的请求(调用买玻璃的函数)之后,立刻可以去拉屎了,片刻不影响!
  
  用户拉屎完毕,舒服了,睡觉去!
  
  上面的例子可以看到,实际上回调函数是层层执行的。执行完最深的那层,再逐一向上执行。
  
  执行用户购买玻璃的方法的时候,程序的执行顺序:主函数的执行顺序:用户调用购买货物的方法) 父二级供应商提供货物的方法) 子一级供应商提供货物的方法) 孙工厂制造过程的方法) 曾孙而每个主函数所编写的的回调函数的代码的执行顺序:工厂制造完毕,会调用回调函数[执行(父级的)一级供应商提供的代码],相当于通知一级供应商,货物已经完成!价格是多少。)
  
  一级供应商确认工厂制造完成,调用回调函数[执行二级供应商提供的代码],通知二级供应商,货物已经有了,价格是多少。这时候的价格已经加价10%)
  
  需要注意的是,必须要等到生产完成并知道工厂提供的实际价格是多少,才可以加价。所以加价的代码由vendor1主动提供,但是执行由工厂用callback执行!
  
  二级供应商拿到货,调用回调函数[执行用户购买所www.csy5294.cn提供的代码],通知用户,货物已经有了,价格是多少。这时候价格又加了20%。真黑!)
  
  用户拿到货了,先验货并付款,并调用回调函数[执行玻璃到货之后的代码,也就是调用user.userBuy的时候编写的回调代码,例如安装玻璃什么的]。流程走完!)
  
  可以看出,嵌套的回调函数的执行顺序是逆向逐步执行。
  
  每一个回调函数代码只和其儿子有关系。儿子做完之后,自动执行回调函数[父亲所写好的代码]。
  
  也可以这样子说:父亲调用儿子的方法,并向儿子写好回调函数执www.ludipt77.cn行的代码。儿子的回调函数的代码由父亲提供。名称是就是callback。
  
  总结:所谓的回调函数,就是由调用函数提供执行代码,被调用函数执行完毕之后,再自动执行的一个函数。异步式。
  
  如果是嵌套的回调函数,就是,调用函数的回调函数嵌入到被调用函数所运行的回调函数代码之间(执行)的函数。就是callback代码中的callback函数。嵌套回调!

关于js的callback回调函数的理解的更多相关文章

  1. js中的回调函数的理解和使用方法

    js中的回调函数的理解和使用方法 一. 回调函数的作用 js代码会至上而下一条线执行下去,但是有时候我们需要等到一个操作结束之后再进行下一个操作,这时候就需要用到回调函数. 二. 回调函数的解释 因为 ...

  2. js中的回调函数的理解

    一,常见的但是不是特别注意的回调方法. 1.1,ajax $.ajax({ url:"test.json", type: "GET", data: {usern ...

  3. callback回调函数的理解

    callback采用的设计模式是:模板模式,他的设计理念是基于面向对象中的多态的. 我们的程序中走到某个地方他会出现不一样的动作的时候,我们在这儿就使用回调函数.我们利用的就是 多态的原理,我们传递不 ...

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

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

  5. js回调函数的理解

    js回调函数(callback)理解 Mark! 讲之前说一句 function say(){ alert(,,,,,,,,) } var say=function (){ alert(,,,,,,, ...

  6. JS中的回调函数实例浅析

    本文实例讲述了JS中的回调函数.分享给大家供大家参考,具体如下: 在说回调函数之前,不妨先看一段代码,相信有点js基础的同学都能明白他的含义: ? 1 2 3 document.getElementB ...

  7. v-if和v-show的区别以及callback回调函数的体会

    今天总结一下最近一周碰到的一些问题 一.v-if和v-show的区别 v-show用的是css属性中的display="block/none",元素被隐藏了但是节点还在页面中,但是 ...

  8. 回调函数透彻理解Java

    http://blog.csdn.net/allen_zhao_2012/article/details/8056665 回调函数透彻理解Java 标签: classjavastringinterfa ...

  9. JavaScript Callback 回调函数

    JavaScript callback回调函数 你到一个商店买东西,刚好你要的东西没有货,于是你在店员那里留下了你的电话,过了几天店里有货了,店员就打了你的电话,然后你接到电话后就到店里去取了货.在这 ...

随机推荐

  1. 【转载】怎么理解Condition

    注:本文主要介绍了Condition和ReentrantLock工具实现独占锁的部分代码原理,Condition能在线程之间协调通信主要是AbstractQueuedSynchronizer和cond ...

  2. java方法的重载

    java方法的重载 public class Person1 {    private String name; //姓名    private int age;      //年龄    priva ...

  3. IOS关于XIB文件和调试时候显示不一样问题

    1 前言 今天工作中,遇到了一个xib文件布局问题,具体问题如下:在xib中加了一个图片,背景为已经切好的图片,但是当显示在模拟器上面的时候却显示不出来效果. 2 详述 2.1 问题截图      如 ...

  4. Rsync同步工具安装文档

    (1)下载Rsync源代码进行安装 (2)1'   cd rsync 2'   ./configure   --prefix=/usr/local/rsync 3'   make 4'   make  ...

  5. jvisualvm图解

    http://blog.csdn.net/a19881029/article/details/8432368 jvisualvm能干什么:监控内存泄露,跟踪垃圾回收,执行时内存.cpu分析,线程分析. ...

  6. WCF - 实例与会话

    实例上下文 实例上下文是对服务实例的封装 是WCF管理服务实例生命周期的依托  一个WCF服务通过ServiceHost进行寄宿 开启服务后当接收到请求 则会判断当前是否存在实例上下文 如果存在 则通 ...

  7. Linux shell的&&和||--转载

    Linux shell的&&和||   shell 在执行某个命令的时候,会返回一个返回值,该返回值保存在 shell 变量 $? 中.当 $? == 0 时,表示执行成功:当 $? ...

  8. android之listView定位到指定行同时隐藏输入键盘

    帮别人该bug遇到的一个问题,记录下来. listView.setSelection(a); 这个方法可以让让你的listview定位到指定行 但是如果紧接着执行隐藏输入键盘的代码,则会有bug,这个 ...

  9. 网站优化的经验和技巧--精简高效的C#

    对大型网站,技术涉及面非常广,对硬件,软件,编程语言,Web Service,防火墙等等有很高要求.    面对大量用户,高并发请求,可以使用高性能服务器,高性能编程语言,高性能数据库,加大带宽等,这 ...

  10. ubuntu 12.04 编译安装 nginx

    下载源码包 nginx 地址:http://nginx.org/en/download.html 编译前先安装两个包: 直接编译安装会碰到缺少pcre等问题,这时候只要到再安装两个包就ok sudo ...