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 相关文章推荐
Prototype使用指南之dom.js
Jan 10 Javascript
让回调函数 showResponse 也带上参数的代码
Aug 13 Javascript
javascript中字符串拼接需注意的问题
Jul 13 Javascript
计算世界完全对称日的js代码,粗糙版
Nov 04 Javascript
JavaScript中的getTimezoneOffset()方法使用详解
Jun 10 Javascript
JS实现自动变换的菜单效果代码
Sep 09 Javascript
使用Javascript实现选择下拉菜单互移并排序
Feb 23 Javascript
浅谈js中的in-for循环
Jun 28 Javascript
使用Vue开发动态刷新Echarts组件的教程详解
Mar 22 Javascript
Node.js的Koa实现JWT用户认证方法
May 05 Javascript
vue-cli3添加模式配置多环境变量的方法
Jun 05 Javascript
taro 实现购物车逻辑的实例代码
Jun 05 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
全国FM电台频率大全 - 12 安徽省
2020/03/11 无线电
php抓取页面与代码解析 推荐
2010/07/23 PHP
PHP输入输出流学习笔记
2015/05/12 PHP
ThinkPHP使用Smarty第三方插件方法小结
2016/03/19 PHP
yii2中LinkPager增加总页数和总记录数的实例
2017/08/28 PHP
JS应用之禁止抓屏、复制、打印
2008/02/21 Javascript
扩展jQuery对象时如何扩展成员变量具体怎么实现
2014/04/25 Javascript
js的Prototype属性解释及常用方法
2014/05/08 Javascript
jQuery获取标签文本内容和html内容的方法
2015/03/27 Javascript
简述JavaScript对传统文档对象模型的支持
2015/06/16 Javascript
浅谈Javascript数组索引
2015/07/29 Javascript
AngualrJS中的Directive制作一个菜单
2016/01/26 Javascript
js验证框架实现代码分享
2016/05/18 Javascript
解析NodeJs的调试方法
2016/12/11 NodeJs
jQuery解析返回的xml和json方法详解
2017/01/05 Javascript
angular4实现tab栏切换的方法示例
2017/10/21 Javascript
原生js生成图片验证码
2020/10/11 Javascript
[02:15]你好,这就是DOTA!
2015/08/05 DOTA
Python打印斐波拉契数列实例
2015/07/07 Python
Python常见异常分类与处理方法
2017/06/04 Python
python字符串的方法与操作大全
2018/01/30 Python
详解Python3 对象组合zip()和回退方式*zip
2019/05/15 Python
python字符串查找函数的用法详解
2019/07/08 Python
将python2.7添加进64位系统的注册表方式
2019/11/20 Python
Python3 socket即时通讯脚本实现代码实例(threading多线程)
2020/06/01 Python
python字典的值可以修改吗
2020/06/29 Python
酒店大堂副理的职责范文
2014/02/13 职场文书
人民调解员先进事迹材料
2014/05/08 职场文书
护理专业毕业生自荐信
2014/06/15 职场文书
2014年前台接待工作总结
2014/12/05 职场文书
关于颐和园的导游词
2015/01/30 职场文书
致短跑运动员加油稿
2015/07/21 职场文书
如何书写你的职业生涯规划书?
2019/06/27 职场文书
如何撰写出一份完美的商业计划书?
2019/07/12 职场文书
Python如何把不同类型数据的json序列化
2021/04/30 Python
实战Python爬虫爬取酷我音乐
2022/04/11 Python