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 相关文章推荐
window.showModalDialog使用手册
Jan 11 Javascript
SeaJS入门教程系列之SeaJS介绍(一)
Mar 03 Javascript
Ext4.2的Ext.grid.plugin.RowExpander无法触发事件解决办法
Aug 15 Javascript
jquery中change()用法实例分析
Feb 06 Javascript
JS设置网页图片vspace和hspace属性的方法
Apr 01 Javascript
JS hashMap实例详解
May 26 Javascript
使用jQuery制作Web页面遮罩层插件的实例教程
May 26 Javascript
JavaScript中获取HTML元素值的三种方法
Jun 20 Javascript
JS简单实现表格排序功能示例
Dec 20 Javascript
基于HTML5+JS实现本地图片裁剪并上传功能
Mar 24 Javascript
javascript高级模块化require.js的具体使用方法
Oct 31 Javascript
Vue解决echart在element的tab切换时显示不正确问题
Aug 03 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
PHP4与PHP3中一个不兼容问题的解决方法
2006/10/09 PHP
openflashchart 2.0 简单案例php版
2012/05/21 PHP
php查找任何页面上的所有链接的方法
2013/12/03 PHP
thinkphp模板输出技巧汇总
2014/11/24 PHP
PHP判断是否为空的几个函数对比
2015/04/21 PHP
阿里云Win2016安装Apache和PHP环境图文教程
2018/03/11 PHP
解析Javascript中大括号“{}”的多义性
2013/12/02 Javascript
js实现checkbox全选和反选示例
2014/05/01 Javascript
JQuery实现当鼠标停留在某区域3秒后自动执行
2014/09/09 Javascript
jQuery实现选项卡切换效果简单演示
2015/12/09 Javascript
javascript关于继承解析
2016/05/10 Javascript
JQuery异步加载PartialView的方法
2016/06/07 Javascript
bootstrap——bootstrapTable实现隐藏列的示例
2017/01/14 Javascript
最简单的vue消息提示全局组件的方法
2019/06/16 Javascript
JavaScript实现的弹出遮罩层特效经典示例【基于jQuery】
2019/07/10 jQuery
[14:56]教你分分钟做大人:巫医
2014/10/30 DOTA
从Python的源码来解析Python下的freeblock
2015/05/11 Python
详解Python中的Descriptor描述符类
2016/06/14 Python
各种Python库安装包下载地址与安装过程详细介绍(Windows版)
2016/11/02 Python
python生成excel的实例代码
2017/11/08 Python
查看django版本的方法分享
2018/05/14 Python
Windows下安装Scrapy
2018/10/17 Python
python 二维数组90度旋转的方法
2019/01/28 Python
Python函数必须先定义,后调用说明(函数调用函数例外)
2020/06/02 Python
Python获取excel内容及相关操作代码实例
2020/08/10 Python
Python 中如何使用 virtualenv 管理虚拟环境
2021/01/21 Python
东方通信股份有限公司VC面试题
2014/08/27 面试题
What is EJB
2016/07/22 面试题
咖啡店自主创业商业计划书
2014/01/22 职场文书
老师的检讨书
2014/02/23 职场文书
小学雷锋月活动总结
2014/07/03 职场文书
公司感恩节活动策划书
2014/10/11 职场文书
2014年仓库工作总结
2014/11/20 职场文书
幼儿园教师节活动总结
2015/03/23 职场文书
netty 实现tomcat的示例代码
2022/06/05 Servers
Java获取字符串编码格式实现思路
2022/09/23 Java/Android