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代码
Sep 04 Javascript
浏览器无法运行JAVA脚本的解决方法
Jan 09 Javascript
jquer之ajaxQueue简单实现代码
Sep 15 Javascript
jQuery实现仿QQ在线客服效果的滚动层代码
Oct 15 Javascript
javascript中的 object 和 function小结
Aug 14 Javascript
利用jQuery实现打字机字幕效果实例代码
Sep 02 Javascript
使用vue-cli编写vue插件的方法
Feb 26 Javascript
ES6中let 和 const 的新特性
Sep 03 Javascript
vue axios封装及API统一管理的方法
Apr 18 Javascript
微信小程序和百度的语音识别接口详解
May 06 Javascript
js实现漂亮的星空背景
Nov 01 Javascript
vue实现简单瀑布流布局
May 28 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
基于initPHP的框架介绍
2013/04/18 PHP
php中引用符号(&)的使用详细介绍
2016/12/06 PHP
thinkPHP实现的省市区三级联动功能示例
2017/05/05 PHP
基于thinkphp6.0的success、error实现方法
2019/11/05 PHP
js查错流程归纳
2012/05/04 Javascript
jQuery如何获取同一个类标签的所有值(默认无法获取)
2014/09/25 Javascript
jquery插件pagination实现无刷新ajax分页
2015/09/30 Javascript
浅析JavaScript中命名空间namespace模式
2016/06/22 Javascript
JS实现iframe自适应高度的方法(兼容IE与FireFox)
2016/06/24 Javascript
JavaScript利用闭包实现模块化
2017/01/13 Javascript
vue webuploader 文件上传组件开发
2017/09/23 Javascript
微信小程序项目实践之九宫格实现及item跳转功能
2018/07/19 Javascript
Angular异步变同步处理方法
2018/08/13 Javascript
Javascript实现动态时钟效果
2018/11/17 Javascript
Bootstarp在pycharm中的安装及简单的使用方法
2019/04/19 Javascript
基于Fixed定位的框选功能的实现代码
2019/05/13 Javascript
vue 兄弟组件的信息传递的方法实例详解
2019/08/30 Javascript
node.js使用fs读取文件出错的解决方案
2019/10/23 Javascript
Vue-Ant Design Vue-普通及自定义校验实例
2020/10/24 Javascript
整理Python中的赋值运算符
2015/05/13 Python
Python可变参数用法实例分析
2017/04/02 Python
Centos部署django服务nginx+uwsgi的方法
2019/01/02 Python
python Qt5实现窗体跟踪鼠标移动
2019/12/13 Python
python 实现图片批量压缩的示例
2020/12/18 Python
CSS3动画:5种预载动画效果实例
2017/04/05 HTML / CSS
Urban Outfitters英国官网:美国平价服饰品牌
2016/11/25 全球购物
Vero Moda西班牙官方购物网站:丹麦BESTSELLER旗下知名女装品牌
2018/04/27 全球购物
新大陆软件面试题
2016/11/24 面试题
优秀幼教自荐信
2014/02/03 职场文书
简历中个人自我评价分享
2014/03/15 职场文书
绿色城市实施方案
2014/03/19 职场文书
红头文件任命书范本
2014/06/05 职场文书
交通事故协议书范文
2014/10/23 职场文书
2016同学毕业寄语大全
2015/12/04 职场文书
redis客户端实现高可用读写分离的方式详解
2021/07/04 Redis
提高系统的吞吐量解决数据库重复写入问题
2022/04/23 MySQL