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 concat数组累加 示例
Sep 03 Javascript
js 实现的可折叠留言板(附源码下载)
Jul 01 Javascript
浅析jQuery事件之on()方法绑定多个选择器,多个事件
Apr 27 Javascript
原生的强大DOM选择器querySelector介绍
Dec 21 Javascript
详解Vue用axios发送post请求自动set cookie
May 10 Javascript
jQuery+ajax实现修改密码验证功能实例详解
Jul 06 jQuery
Vue.js学习笔记之修饰符详解
Jul 25 Javascript
node.js的exports、module.exports与ES6的export、export default深入详解
Oct 26 Javascript
微信小程序实现折叠与展开文章功能
Jun 12 Javascript
浅谈redux以及react-redux简单实现
Aug 28 Javascript
详解Vue.js自定义tipOnce指令用法实例
Dec 19 Javascript
JavaScript 中的六种循环方法
Jan 06 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开发框架总结收藏
2008/04/24 PHP
PHP HTML代码串截取代码
2008/12/29 PHP
php 一元分词算法
2009/11/30 PHP
探讨如何把session存入数据库
2013/06/07 PHP
在yii中新增一个用户验证的方法详解
2013/06/20 PHP
Destoon旺旺无法正常显示,点击提示“会员名不存在”的解决办法
2014/06/21 PHP
PHP中的Iterator迭代对象属性详解
2019/04/12 PHP
php获取微信openid方法总结
2019/10/10 PHP
SlideView 图片滑动(扩展/收缩)展示效果
2010/08/01 Javascript
jQuery EasyUI API 中文文档 - ComboBox组合框
2011/10/07 Javascript
div模拟选择框示例代码
2013/11/03 Javascript
js限制文本框只能输入数字方法小结
2014/06/16 Javascript
js实现用户注册协议倒计时的方法
2015/01/21 Javascript
JS模拟并美化的表单控件完整实例
2015/08/19 Javascript
jQuery on()绑定动态元素出现的问题小结
2016/02/19 Javascript
jQuery通过ajax快速批量提交表单数据
2016/10/25 Javascript
关于ES6的六个小特性(二)
2017/02/20 Javascript
JS+HTML5 FileReader对象用法示例
2017/04/07 Javascript
vue-quill-editor实现图片上传功能
2017/08/08 Javascript
Express使用html模板的详细代码
2017/09/18 Javascript
简述vue中的config配置
2018/01/23 Javascript
javascript中的相等操作符(==与===区别)
2019/12/21 Javascript
解决vue里a标签值解析变量,跳转页面,前面加默认域名端口的问题
2020/07/22 Javascript
[58:54]EG vs RNG 2019国际邀请赛小组赛 BO2 第一场 8.16
2019/08/18 DOTA
Python如何实现MySQL实例初始化详解
2017/11/06 Python
Python实现读取json文件到excel表
2017/11/18 Python
python3 mmh3安装及使用方法
2019/10/09 Python
Python模块常用四种安装方式
2020/10/20 Python
安全的后院和健身蹦床:JumpSport
2019/07/15 全球购物
博朗(Braun)俄罗斯官方商店:德国小家电品牌
2019/09/24 全球购物
主管竞聘书范文
2014/03/31 职场文书
工作简报怎么写
2015/07/21 职场文书
导游词之崇武古城
2019/10/07 职场文书
MySQL 四种连接和多表查询详解
2021/07/16 MySQL
Golang Web 框架Iris安装部署
2022/08/14 Python
MySQL中的 inner join 和 left join的区别解析(小结果集驱动大结果集)
2023/05/08 MySQL