在Javascript中什么是回调函数,我认为简单来说就是把一个函数B作为参数传递给另一个函数A,在A函数中的一定时机调用函数B。

这里可以看出回调函数形成了一个闭包,它可以访问函数A中的活动对象。

请见下面代码:

某村二娃子像买肾机6,但苹果店发现木有库存了,准备去进货,那么这时候二娃子有选择:

一是:

过一会来问一下:”到货没?“,”没有“!

过一会来问一下:”到货没?“,”没有“!

过一会来问一下:”到货没?“,”没有“!

过一会来问一下:”到货没?“,”没有“!

我们称这为轮询方式,这样是比较低效的,二娃子腿都跑断了。

这时候还有一种方式,可以留下电话号码,让水果店到货后再通知二娃子去买,这样二娃子屁颠屁颠滴去干别的活了,坐等通知。

在这里,向水果店询问的 query 方法中,留了手机号码,这个手机号就是一个回调函数。水果店给回调函数传递了到货数量,这就是带返回参数的回调函数。

var seller= {
stock:"iphone6",
stockQty: 0,
query: function (something, quantity, phone13988888888) {
console.log("你要买" + something + "吗?");
if(this.stock==something) {
console.log("是的我们卖" + ",但是让我先我查下库存");
if (this.stockQty < quantity) {
console.log("抱歉我们卖完了,你看库存单---" + something + "的存货数数量是:" + this.stockQty + "---,请留个手机号码,进货后通知你来取!")
sleep(0.01);
this.stockQty = 100;
console.log("我们到货了,到货数量我一会打电话告诉你!");
console.log("马上拨号:")
phone13988888888(this.stock,this.stockQty); }else{
console.log("库存够的,马上发货---"+something+":"+quantity+"---台!");
this.stockQty=this.stockQty-quantity;
return quantity;
}
}else{
console.log("抱歉,我们不卖:"+something+"请别处看看!");
}
}
}; function sleep(delay)
{
var start = new Date().getTime();
while (new Date().getTime() < start + delay){
console.log("进货中...");
};
} function phone13988888888(item,quantity){
console.log("接到电话了,苹果店说他们来了---"+item+":"+quantity+"---台!");
if(quantity>0){
console.log("这次可以买到了,阿哈哈哈!");
var qty=2;
console.log("又跑到水果店,大喊老板,肾机6来:--"+qty+"--台!");
var receiver=seller.query("iphone6",qty);
if(receiver===qty){
console.log("收到"+item+":"+qty+"台,交易完成!")
}
}
} console.log("老板,肾机iphone6来一台!");
seller.query("iphone6",1,phone13988888888); seller.query("iphone7",1,phone13988888888);

再看输出结果:

二娃子:老板,肾机iphone6来一台!

店小二:你要买iphone6吗?
店小二:是的我们卖,但是让我先我查下库存
店小二:抱歉我们卖完了,你看库存单---iphone6的存货数数量是:0---,请留个手机号码,进货后通知你来取!
店小二:进货中...
店小二:进货中...
店小二:进货中...
店小二:进货中...
店小二:进货中...
店小二:我们到货了,到货数量我一会打电话告诉你!
店小二:马上拨号: 二娃子:接到电话了,苹果店说他们来了---iphone6:100---台!
二娃子:这次可以买到了,阿哈哈哈! 二娃子:跑到水果店,大喊老板,肾机6来:--2--台! 店小二:你要买iphone6吗?
店小二:是的我们卖,但是让我先我查下库存
店小二:库存够的,马上发货---iphone6:2---台! 二娃子:收到iphone6:2台,交易完成! 店小二:你要买iphone7吗?
店小二:抱歉,我们不卖:iphone7请别处看看!

Javascript 回调函数理解---二娃子买肾机6的更多相关文章

  1. 理解javascript 回调函数

    ##回调函数定义 百度百科:回调函数 回调函数就是一个通过函数指针调用的函数.如果你把函数的指针(地址)作为参数传递给另一个函数,当这个指针被用为调用它所指向的函数时,我们就说这是回调函数.回调函数不 ...

  2. 理解 JavaScript 回调函数并使用

    JavaScript中,函数是一等(first-class)对象:也就是说,函数是 Object 类型并且可以像其他一等对象(String,Array,Number等)一样使用.它们可以"保 ...

  3. JavaScript入门-函数function(二)

    JavaScript入门-函数function(二) 递归函数 什么是递归函数? 递归简单理解就是,在函数体里,调用自己. //我们在求一个10的阶乘的时候,可能会这么做 //写一个循环 var to ...

  4. JavaScript回调函数的实现

    https://github.com/forsigner/blog/blob/master/source/_posts/javascript-callback.md 在JavaScript中,回调函数 ...

  5. Javascript常用方法函数收集(二)

    Javascript常用方法函数收集(二) 31.判断是否Touch屏幕 function isTouchScreen(){ return (('ontouchstart' in window) || ...

  6. 【JavaScript】JavaScript回调函数

    什么是Javascript 回调函数? 函数和其他数据一样可以被赋值,删除,拷贝等,所以也可以把函数作为参数传入到另一个函数中. 这个函数就是所谓的回调函数   举例: //不带参数的case fun ...

  7. JavaScript回调函数及数组方法测试

    JavaScript回调函数及数组方法测试 具体代码如下: <!DOCTYPE html> <html lang="en"> <head> &l ...

  8. 如何定义 Java 的回调函数,与 JavaScript 回调函数的区别

    JavaScript 中的回调函数 在 JavaScript 中经常使用回调函数,比如:get 请求.post 请求等异步任务.在我们请求之前以及请求之后,都需要完成一些固定的操作,比如:请求之前先从 ...

  9. JavaScript回调函数的理解

    这里是个人对回调函数的一段理解 <!DOCTYPE html> <html> <head> <title>回调函数</title> < ...

随机推荐

  1. [Element-UI] 使用Element-UI的DateTimePicker组件报错:Cannot read property 'getHours' of undefined

    使用Element-UI组件的DateTimePicker,如下: <template> <div class="block"> <span clas ...

  2. 微信小程序自定义组件的使用以及调用自定义组件中的方法

    在写小程序的时候,有时候页面的内容过多,逻辑比较复杂,如果全部都写在一个页面的话,会比较繁杂,代码可读性比较差,也不易于后期代码维护,这时候可以把里面某部分功能抽出来,单独封装为一个组件,也就是通常说 ...

  3. 剑指offer十三之调整数组顺序使奇数位于偶数前面

    一.题目 输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变. 二.思路 此题可 ...

  4. Python:SQLMap的工作流程

    流程图 代码解析 后面补充…… 版权 作   者:曾是土木人 新浪微博:http://weibo.com/cstmr 转载请注明出处:http://www.cnblogs.com/hongfei/p/ ...

  5. Bash算术运算

    使用let命令 let let let let let let let 使用expr命令 - ` # + ` # \* ` # / ` # / ` # − \* ` # +` # + -*· # -* ...

  6. ubuntu安转QTcreator出现The default mkspec symlink is broken

    QT Creator安装:https://blog.csdn.net/arackethis/article/details/42326967 QT SDK安装:https://blog.csdn.ne ...

  7. 【Canal源码分析】整体架构

    本文详解canal的整体架构. 一.整体架构 说明: server代表一个canal运行实例,对应于一个jvm instance对应于一个数据队列 (1个server对应1..n个instance) ...

  8. Executor框架(一)

    类继承关系 更详细的继承关系: ExecutorComplitionService类 在说Executor接口及实现类之前,先聊聊ExecutorComplitionService. 成员变量 pri ...

  9. 腾讯云点播视频存储(Web端视频上传)

    官方文档 前言 所谓视频上传,是指开发者或其用户将视频文件上传到点播的视频存储中,以便进行视频处理.分发等. 一.简介 腾讯云点播支持如下几种视频上传方式: 控制台上传:在点播控制台上进行操作,将本地 ...

  10. Linux安装codis

    codis用go语言开发的,安装前记得先安装go开发环境,Linux安装go语言开发包 前提条件:记得安装git,否则无法下载go语言开发包 1.建立一个go语言的工作目录创建目录:sudo mkdi ...