浅谈js回调函数

在JavaScript中,刚开始学习的时候,很多人感到最困惑的就是回调函数了。本文通过一个小小的例子来分析回调函数的用法。

在很久很久以前,有一个人。

var  person;

他是个人,也就是一个对象。

person= {}; // 在JavaScript中,花括号就代表是一个对象

他有个名字叫小明。

person.name = '小明';

看一下是不是真的叫小明。

alert(person.name);

嗯,有一天,小明捡到了10块钱。

person.money = '10块钱';

有了钱就要花,于是他打算把10块钱用掉。

小明有一个花钱的方法 spendMoney ()

person.spendMoney =function(){   alert(this.name +"用 "+this.money +" 块钱买了漫画书!");    }

运行:

person.spendMoney();

弹出提示:小明用10块钱买了漫画书。

好了,问题来了,小明花钱就非得买漫画书吗,肯定不是。

事实情况应该是,这钱怎么办,还是由他自己说了算。因为钱在小明的口袋里。

所以,就可以用回调函数了。

回调函数本身就是一个数据类型。

在javaScript中,函数的地位和java中的String,int,boolean等等都是一样的,都可以看成是一个数据类型。

既然是数据类型,当然可以当成参数传递。

于是就应该这样:

person.spendMoney =function(doSomeThing){   doSomeThing();   }

打了个括号就是执行函数的意思。

没打括号的函数,就是和String,int一样的玩意儿。

是一个数据类型。

一样的。

JAVA里面会这么写:

String str ="HelloWorld!";

在JavaScript中,函数也是一样的。

var  say =function(){ 

     alert('HelloWorld');

}

这时候的say就是一个数据类型。

因为没有打括号,打了括号他才会执行!

小明用十块钱做什么,他自己说了算。

person.spendMoney(function(){});

这样就是把函数传进去了。

把函数传入spendMoney方法的目的就是让函数在里面执行的。

所以:

person.spendMoney =function(doSomeThing){   doSomeThing();  }

里面就打了括号,代表要执行这个函数。

具体做什么,自己决定。

person.spendMoney(function(){   alert('还是把钱存起来吧!');  });

总结一下,就是可以将函数作为一个参数,传入一个方法内,并且能够在该方法中执行这个函数,这也就是js特有的回调函数的魔力。

免责声明: 博客中所有的图片素材均来自百度搜索,仅供学习交流,如有问题请联系我,侵立删,谢谢。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 小兔JS教程(三)-- 彻底攻略JS回调函数

    剽悍一小兔
  • Error configuring application listener of class org.springframework.web.context.ContextLoader

    剽悍一小兔
  • Java小试牛刀第一期:如何用idea创建项目

    IDEA不需要用最新的,用 **2017.2 **的就很好,经本人测试,这个版本相对来说比较稳定,学习的话足够用了。

    剽悍一小兔
  • assert()函数

    青木
  • SpringBoot启动时执行任务

    在 SpringBoot 项目中,main 方法调用了 SpringApplication.run 方法,在 SpringApplication...

    码农UP2U
  • 树莓派基础实验32:DS1302实时时钟模块实验

      现在有很多流行的串行时钟芯片,如DS1302,DS1307,PCF8485等,由于简单的接口,低成本和易用性,他们被广泛应用于电话、传真、便携式仪器等产品领...

    张国平
  • 速读原著-TCP/IP(以太网和IEEE 802封装)

    从图1 - 4中可以看出,在T C P / I P协议族中,链路层主要有三个目的: (1)为I P模块发送和接收I P数据报; (2)为A R P模块发送A...

    cwl_java
  • dotnet 控制台读写 Sqlite 提示 no such table 找不到文件

    在使用 dotnet 读写 Sqlite 可以通过 EF Core 的方法,但是在 EF Core 创建的数据库可能和读写的数据库不是相同的文件

    林德熙
  • 基于Haproxy的高可用实战

    软件:haproxy---主要是做负载均衡的7层,也可以做4层负载均衡 apache也可以做7层负载均衡,但是很麻烦。实际工作中没有人用。负载均衡是通过OSI协...

    民工哥
  • Android Studio中统一管理版本号引用配置问题

    在根目录下的build.gradle文件下添加 buildscript{ …. } 中的内容:

    砸漏

扫码关注云+社区

领取腾讯云代金券