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 相关文章推荐
javascript中的delete使用详解
Apr 11 Javascript
div浮层,滚动条移动,位置保持不变的4种方法汇总
Dec 11 Javascript
Jquery 点击按钮自动高亮实现原理及代码
Apr 25 Javascript
node.js中的console.info方法使用说明
Dec 09 Javascript
js匿名函数作为函数参数详解
Jun 01 Javascript
JavaScript判断数组重复内容的两种方法(推荐)
Jun 06 Javascript
jQuery ajax的功能实现方法详解
Jan 06 Javascript
微信小程序 后台登录(非微信账号)实例详解
Mar 31 Javascript
Angular4学习笔记之根模块与Ng模块
Sep 09 Javascript
详解Vuex管理登录状态
Nov 13 Javascript
JS中的防抖与节流及作用详解
Apr 01 Javascript
如何在微信小程序里面退出小程序的方法
Apr 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
PHP性能优化准备篇图解PEAR安装
2011/12/05 PHP
PHP分多步骤填写发布信息的简单方法实例代码
2012/09/23 PHP
Mac系统下使用brew搭建PHP(LNMP/LAMP)开发环境
2015/03/03 PHP
JavaScript.The.Good.Parts阅读笔记(一)假值与===运算符
2010/11/16 Javascript
向左滚动文字 js代码效果
2013/08/17 Javascript
javascript获取select的当前值示例代码(兼容IE/Firefox/Opera/Chrome)
2013/12/17 Javascript
jquery 取子节点及当前节点属性值的方法
2014/08/24 Javascript
原生javascript实现Tab选项卡切换功能
2015/01/12 Javascript
常用的JavaScript WEB操作方法分享
2015/02/28 Javascript
jquery.form.js实现将form提交转为ajax方式提交的方法
2015/04/07 Javascript
Javascript中setTimeOut和setInterval的定时器用法
2015/06/12 Javascript
node.js报错:Cannot find module 'ejs'的解决办法
2016/12/14 Javascript
angular实现spa单页面应用实例
2017/07/10 Javascript
利用node.js爬取指定排名网站的JS引用库详解
2017/07/25 Javascript
JavaScript异步加载问题总结
2018/02/17 Javascript
jquery实现两个div中的元素相互拖动的方法分析
2020/04/05 jQuery
[03:01]完美盛典趣味短片 DOTA2年度最佳&拉胯英雄
2019/12/07 DOTA
[15:07]lgd_OG_m2_BP
2019/09/10 DOTA
Python常用随机数与随机字符串方法实例
2015/04/09 Python
TensorFlow实现模型评估
2018/09/07 Python
解决TensorFlow模型恢复报错的问题
2020/02/06 Python
详解Django配置JWT认证方式
2020/05/09 Python
为什么相对PHP黑python的更少
2020/06/21 Python
canvas实现圆绘制的示例代码
2019/09/11 HTML / CSS
html5通过canvas实现刮刮卡效果示例分享
2014/01/27 HTML / CSS
迪拜领先运动补剂零售品牌中文站:Sporter商城
2019/08/20 全球购物
大学校庆邀请函
2014/01/11 职场文书
优秀团员自我评价范文
2014/04/23 职场文书
亮剑精神演讲稿
2014/05/23 职场文书
律师授权委托书范本
2014/10/07 职场文书
就业意向协议书
2015/01/29 职场文书
班级元旦晚会开幕词
2015/01/29 职场文书
女性健康知识讲座通知
2015/04/23 职场文书
学生检讨书怎么写
2015/05/07 职场文书
六一文艺汇演主持词
2015/06/30 职场文书
2016年度创先争优活动总结
2016/04/05 职场文书