Javascript中的Callback方法浅析


Posted in Javascript onMarch 15, 2015

什么是callback

 回调函数就是一个通过函数指针调用的函数。如果你把函数的指针(地址)作为参数传递给另一个函数,当这个指针被用为调用它所指向的函数时,我们就说这是回调函数。回调函数不是由该函数的实现方直接调用,而是在特定的事件或条件发生时由另外的一方调用的,用于对该事件或条件进行响应。

这个解释看上去很复杂,于是找到了知乎上一个更好的解释

 你到一个商店买东西,刚好你要的东西没有货,于是你在店员那里留下了你的电话,过了几天店里有货了,店员就打了你的电话,然后你接到电话后就到店里去取了货。在这个例子里,你的电话号码就叫回调函数,你把电话留给店员就叫登记回调函数,店里后来有货了叫做触发了回调关联的事件,店员给你打电话叫做调用回调函数,你到店里去取货叫做响应回调事件。回答完毕。

在Javascript中:

 函数A作为参数(函数引用)传递到另一个函数B中,并且这个函数B执行函数A。我们就说函数A叫做回调函数。如果没有名称(函数表达式),就叫做匿名回调函数。

实际上,也就是把函数作为参数传递。

Javscript Callback

把上面那些复杂的解释都丢到垃圾桶里吧~,看看Callback是什么

Callback是什么

在jQuery中, hide的方法大概是这样子的

$(selector).hide(speed,callback)

使用的时候,
$('#element').hide(1000, function() {

    // callback function

});

我们只需要在里面写一个简单的函数
$('#element').hide(1000, function() {

    console.log('Hide');

});

有一个小小的注释在这其中:Callback 函数在当前动画 100% 完成之后执行。然后我们就可以看到真正的现象,当id为element的元素隐藏后,会在console中输出Hide。

就也就意味着:

Callback实际上是,当一个函数执行完后,现执行的那个函数就是所谓的callback函数。

Callback作用

正常情况下函数都是按顺序执行的,然而Javascript是一个事件驱动的语言。

function hello(){

    console.log('hello');

}
function world(){

    console.log('world');

}
hello();

world();

所以正常情况下都会按顺序执行的,然而当执行world事件的时间比较长时。
function hello(){

    setTimeout( function(){

        console.log( 'hello' );

    }, 1000 );

}
function world(){

    console.log('world');

}
hello();

world();

那么这个时候就不是这样的,这时会输出world,再输出hello,故而我们需要callback。

Callback实例

一个简单地例子如下

function add_callback(p1, p2 ,callback) {

    var my_number = p1 + p2;

    callback(my_number);

}
add_callback(5, 15, function(num){

    console.log("call " + num);

});

在例子中我们有一个add_callback的函数,接收三个参数:前两个是要相加的两个参数,第三个参数是回调函数。当函数执行时,返回相加结果,并在控制台中输出'call 20'。
Javascript 相关文章推荐
RGB颜色值转HTML十六进制(HEX)代码的JS函数
Apr 25 Javascript
理解JavaScript的caller,callee,call,apply
Apr 28 Javascript
JQuery的Ajax跨域请求原理概述及实例
Apr 26 Javascript
再谈Jquery Ajax方法传递到action(补充)
May 12 Javascript
Backbone.js 0.9.2 源码注释中文翻译版
Jun 25 Javascript
JavaScript之AOP编程实例
Jul 17 Javascript
AngularJS模块学习之Anchor Scroll
Jan 19 Javascript
Vue框架下引入ActiveX控件的问题解决
Mar 25 Javascript
微信小程序设置全局请求URL及封装wx.request请求操作示例
Apr 02 Javascript
Node.js使用MongoDB的ObjectId作为查询条件的方法
Sep 10 Javascript
Vue根据条件添加click事件的方式
Nov 09 Javascript
解决echarts数据二次渲染不成功的问题
Jul 20 Javascript
Javascript中的call()方法介绍
Mar 15 #Javascript
Javascript中的高阶函数介绍
Mar 15 #Javascript
Javascript中this关键字的一些小知识
Mar 15 #Javascript
Javascript URI 解析介绍
Mar 15 #Javascript
PHP+jQuery+Ajax实现多图片上传效果
Mar 14 #Javascript
jQuery oLoader实现的加载图片和页面效果
Mar 14 #Javascript
jQuery实现购物车数字加减效果
Mar 14 #Javascript
You might like
.htaccess文件保护实例讲解
2011/02/06 PHP
关于PHP递归算法和应用方法介绍
2013/04/15 PHP
PHP实现生成数据字典功能示例
2018/05/24 PHP
js继承的实现代码
2010/08/05 Javascript
js常用排序实现代码
2010/12/28 Javascript
用jQuery模拟页面加载进度条的实现代码
2011/12/19 Javascript
javascript继承之为什么要继承
2012/11/10 Javascript
javascript操作excel生成报表全攻略
2014/05/04 Javascript
解释&&和||在javascript中的另类用法
2014/07/28 Javascript
浅析JS获取url中的参数实例代码
2016/06/14 Javascript
简洁实用的BootStrap jQuery手风琴插件
2016/08/31 Javascript
微信小程序 WXML、WXSS 和JS介绍及详解
2016/10/08 Javascript
JS实现超简单的汉字转拼音功能示例
2016/12/22 Javascript
AngularJS实现自定义指令与控制器数据交互的方法示例
2017/06/19 Javascript
React Native之ListView实现九宫格效果的示例
2017/08/02 Javascript
使用jQuery实现两个div中按钮互换位置的实例代码
2017/09/21 jQuery
Node层模拟实现multipart表单的文件上传示例
2018/01/02 Javascript
vue-cli脚手架的安装教程图解
2018/09/02 Javascript
JS实现电话号码的字母组合算法示例
2019/02/26 Javascript
详解一次Vue低版本安卓白屏问题的解决过程
2019/05/30 Javascript
[04:19]完美世界携手游戏风云打造 卡尔工作室模型介绍篇
2013/04/24 DOTA
[34:10]Secret vs VG 2019国际邀请赛淘汰赛 败者组 BO3 第二场 8.24
2019/09/10 DOTA
python写入中英文字符串到文件的方法
2015/05/06 Python
在Python中操作字典之update()方法的使用
2015/05/22 Python
Python使用urllib2模块实现断点续传下载的方法
2015/06/17 Python
Python Numpy:找到list中的np.nan值方法
2018/10/30 Python
Python使用LDAP做用户认证的方法
2019/06/20 Python
python tkinter实现彩球碰撞屏保
2019/07/30 Python
pytorch中使用cuda扩展的实现示例
2020/02/12 Python
python爬虫中PhantomJS加载页面的实例方法
2020/11/12 Python
HTML5注册页面示例代码
2014/03/27 HTML / CSS
美国最便宜的旅游网站:CheapTickets
2017/07/09 全球购物
如何将无状态会话Bean发布为WEB服务,只有无状态会话Bean可以发布为WEB服务?
2015/12/03 面试题
学生个人自我鉴定
2014/03/26 职场文书
2015年高校教师个人工作总结
2015/05/25 职场文书
MySQL数据库如何使用Shell进行连接
2022/04/12 MySQL