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 相关文章推荐
Jsonp 跨域的原理以及Jquery的解决方案
May 18 Javascript
ASP.NET jQuery 实例3 (在TextBox里面阻止复制、剪切和粘贴事件)
Jan 13 Javascript
JavaScript数值数组排序示例分享
May 27 Javascript
JavaScript精炼之构造函数 Constructor及Constructor属性详解
Nov 05 Javascript
JavaScript学习笔记之数组求和方法
Mar 23 Javascript
利用jQuery的动画函数animate实现豌豆发射效果
Aug 28 Javascript
从零学习node.js之简易的网络爬虫(四)
Feb 22 Javascript
AngularJs 禁止模板缓存的方法
Nov 28 Javascript
Promise.all中对于reject的处理方法
Aug 01 Javascript
让axios发送表单请求形式的键值对post数据的实例
Aug 11 Javascript
vue3.0 CLI - 2.4 - 新组件 Forms.vue 中学习表单
Sep 14 Javascript
vue+axios+promise实际开发用法详解
Oct 15 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打开文件fopen函数的使用说明
2013/07/05 PHP
List the Stored Procedures in a SQL Server database
2007/06/20 Javascript
在vs2010中调试javascript代码方法
2011/02/11 Javascript
重载toString实现JS HashMap分析
2011/03/13 Javascript
javascript通过元素id和name直接取得元素的方法
2015/04/28 Javascript
jQuery实现带有洗牌效果的动画分页实例
2015/08/31 Javascript
jQuery实现鼠标选文字发新浪微博的方法
2016/04/02 Javascript
JavaScript中的Object对象学习教程
2016/05/20 Javascript
jQuery为动态生成的select元素添加事件的方法
2016/08/29 Javascript
老生常谈combobox和combotree模糊查询
2017/04/17 Javascript
js中如何完美的解析数据
2018/03/18 Javascript
react中使用swiper的具体方法
2018/05/15 Javascript
JS实现同一DOM元素上onClick事件与onDblClick事件并存的解决方法
2018/06/07 Javascript
微信小程序实现富文本图片宽度自适应的方法
2019/01/20 Javascript
layer的prompt弹出框,点击回车,触发确定事件的方法
2019/09/06 Javascript
javaScript 实现重复输出给定的字符串的常用方法小结
2020/02/20 Javascript
js实现简单音乐播放器
2020/06/30 Javascript
[05:53]完美世界携手游戏风云打造 卡尔工作室观战系统篇
2013/04/22 DOTA
Python利用Nagios增加微信报警通知的功能
2016/02/18 Python
简单谈谈python中的语句和语法
2017/08/10 Python
Python探索之pLSA实现代码
2017/10/25 Python
基于Pandas读取csv文件Error的总结
2018/06/15 Python
Mac下Anaconda的安装和使用教程
2018/11/29 Python
Django管理员账号和密码忘记的完美解决方法
2018/12/06 Python
全球领先的鞋类零售商:The Walking Company
2016/07/21 全球购物
法国时尚品牌乐都特瑞士站:La Redoute瑞士
2016/09/05 全球购物
美国香薰蜡烛品牌:PADDYWAX
2018/10/06 全球购物
英国蜡烛、蜡烛配件和家居香氛购买网站:Yankee Candle
2018/12/12 全球购物
企业统计员岗位职责
2013/12/13 职场文书
新春文艺演出主持词
2014/03/27 职场文书
建筑专业毕业生求职信
2014/09/30 职场文书
2015年度服装销售工作总结
2015/03/31 职场文书
小学秋季运动会加油口号及加油稿
2019/08/19 职场文书
科普 | 业余无线电知识-波段篇
2022/02/18 无线电
CentOS 7安装mysql5.7使用XtraBackUp备份工具命令详解
2022/04/12 MySQL
详解Go语言中Get/Post请求测试
2022/06/01 Golang