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 相关文章推荐
JS延迟加载加快页面打开速度示例代码
Dec 30 Javascript
使用JavaScript的ActiveXObject对象检测应用程序是否安装的方法
Apr 15 Javascript
javascript使用prototype完成单继承
Dec 24 Javascript
js+jquery常用知识点汇总
Mar 03 Javascript
JavaScript实现数组随机排序的方法
Jun 26 Javascript
jQuery实现选项联动轮播效果【附实例】
Apr 19 Javascript
jQGrid动态填充select下拉框的选项值(动态填充)
Nov 28 Javascript
JQuery实现定时刷新功能代码
May 09 jQuery
详解vue的diff算法原理
May 20 Javascript
jQuery实现的简单获取索引功能示例
Jun 04 jQuery
详解小程序设置缓存并且不覆盖原有数据
Apr 15 Javascript
H5 js点击按钮复制文本到粘贴板
Nov 19 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
PHP执行linux系统命令的常用函数使用说明
2010/04/27 PHP
php cookie的操作实现代码(登录)
2010/12/29 PHP
PHP大批量数据操作时临时调整内存与执行时间的方法
2011/04/20 PHP
php多功能图片处理类分享(php图片缩放类)
2014/03/14 PHP
php中fgetcsv()函数用法实例
2014/11/28 PHP
php格式化电话号码的方法
2015/04/24 PHP
Yii2中添加全局函数的方法分析
2017/05/04 PHP
javascript的parseFloat()方法精度问题探讨
2013/11/26 Javascript
Javascript 构造函数详解
2014/10/22 Javascript
JS是按值传递还是按引用传递
2015/01/30 Javascript
JavaScript递归算法生成树形菜单
2017/08/15 Javascript
vue中el-upload上传图片到七牛的示例代码
2018/10/19 Javascript
JS闭包原理与应用经典示例
2018/12/20 Javascript
JavaScript 性能提升之路(推荐)
2019/04/10 Javascript
详解JavaScript的内存空间、赋值和深浅拷贝
2019/04/17 Javascript
vue实现日历备忘录功能
2020/09/24 Javascript
JavaScript使用百度ECharts插件绘制饼图操作示例
2019/11/26 Javascript
利用Python的Django框架生成PDF文件的教程
2015/07/22 Python
Python基于滑动平均思想实现缺失数据填充的方法
2019/02/21 Python
python关于调用函数外的变量实例
2019/12/26 Python
python标准库OS模块详解
2020/03/10 Python
Windows下Anaconda安装、换源与更新的方法
2020/04/17 Python
selenium+headless chrome爬虫的实现示例
2021/01/08 Python
Ted Baker英国官网:男士和女士服装及配件
2017/03/13 全球购物
宝信软件JAVA工程师面试经历
2012/08/19 面试题
PPP协议组成及简述协议协商的基本过程
2015/05/28 面试题
商业房地产广告语
2014/03/13 职场文书
个人委托书格式
2014/04/04 职场文书
祖国在我心中的演讲稿
2014/05/04 职场文书
社区青年志愿者活动总结
2015/05/06 职场文书
结婚当天新郎保证书
2015/05/08 职场文书
2016年读书月活动总结范文
2016/04/06 职场文书
浅谈Python3中datetime不同时区转换介绍与踩坑
2021/08/02 Python
教你使用一行Python代码玩遍童年的小游戏
2021/08/23 Python
海贼王十大逆天果实 魂魂果实上榜,岩浆果实攻击力最强
2022/03/18 日漫
Java 多线程并发FutureTask
2022/06/28 Java/Android