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 相关文章推荐
网页右键ie不支持event.preventDefault和event.returnValue (需要加window)
Feb 22 Javascript
jQuery中:password选择器用法实例
Jan 03 Javascript
Javascript 完美运动框架(逐行分析代码,让你轻松了运动的原理)
Jan 23 Javascript
JavaScript错误处理
Feb 03 Javascript
Bootstrap基本模板的使用和理解1
Dec 14 Javascript
angular2倒计时组件使用详解
Jan 12 Javascript
vue页面使用阿里oss上传功能的实例(一)
Aug 09 Javascript
浅谈Webpack自动化构建实践指南
Dec 18 Javascript
JS 实现缓存算法的示例(FIFO/LRU)
Mar 20 Javascript
video.js 一个页面同时播放多个视频的实例代码
Nov 27 Javascript
深入理解JS异步编程-Promise
Jun 03 Javascript
jQuery实现轮播图效果demo
Jan 11 jQuery
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
windows下PHP APACHE MYSQ完整配置
2007/01/02 PHP
php define的第二个参数使用方法
2013/11/04 PHP
PHP自动生成表单代码分享
2015/06/19 PHP
php发送短信验证码完成注册功能
2015/11/24 PHP
PHP中explode函数和split函数的区别小结
2016/08/24 PHP
thinkPHP5框架分页样式类完整示例
2018/09/01 PHP
用正则表达式 动态创建/增加css style script 兼容IE firefox
2009/03/10 Javascript
js面向对象之静态方法和静态属性实例分析
2015/01/10 Javascript
js判断浏览器版本以及浏览器内核的方法
2015/01/20 Javascript
jQuery弹出框代码封装DialogHelper
2015/01/30 Javascript
JavaScript返回网页中锚点数目的方法
2015/04/03 Javascript
javascript实现无缝上下滚动特效
2015/12/16 Javascript
nodejs如何获取时间戳与时间差
2016/08/03 NodeJs
Js查找字符串中出现次数最多的字符及个数实例解析
2016/09/05 Javascript
AngularJs ng-change事件/指令的用法小结
2017/11/01 Javascript
使用命令行工具npm新创建一个vue项目的方法
2017/12/27 Javascript
详解使用vue-cli脚手架初始化Vue项目下的项目结构
2018/03/08 Javascript
nodejs异步编程基础之回调函数用法分析
2018/12/26 NodeJs
layui 地区三级联动 form select 渲染的实例
2019/09/27 Javascript
Python中使用strip()方法删除字符串中空格的教程
2015/05/20 Python
解决nohup重定向python输出到文件不成功的问题
2018/05/11 Python
django加载本地html的方法
2018/05/27 Python
python 的 scapy库,实现网卡收发包的例子
2019/07/23 Python
python GUI库图形界面开发之PyQt5信号与槽基础使用方法与实例
2020/03/06 Python
Django项目uwsgi+Nginx保姆级部署教程实现
2020/04/19 Python
Django之富文本(获取内容,设置内容方式)
2020/05/21 Python
Python定义一个函数的方法
2020/06/15 Python
python如何写个俄罗斯方块
2020/11/06 Python
python 用opencv实现霍夫线变换
2020/11/27 Python
abstract是什么意思
2012/02/12 面试题
short s1 = 1; s1 = s1 + 1;有什么错? short s1 = 1; s1 += 1;有什么错?
2014/09/26 面试题
绿化工程实施方案
2014/03/17 职场文书
党支部承诺书范文
2014/03/28 职场文书
经典团队口号
2014/06/06 职场文书
运动会稿件100字
2014/09/24 职场文书
《七律·长征》教学反思
2016/02/16 职场文书