https://github.com/forsigner/blog/blob/master/source/_posts/javascript-callback.md

在JavaScript中,回调函数的使用非常频繁。特别是在各种Javascript库中,经常在一个函数中使用回调函数,例如jQuery中的each()方法。一年以来,在使用各种有回调函数的函数时,都没有去深究其内部的实现原理真,惭愧。在有米实习时,在读js师兄的代码时,偶然看到他写的一个函数是他自己实现回调函数的,当时感觉很神奇,原来这就是回调函数啊,之后google了很多关于Javascript回调函数的资料,终于大概弄明白回调函数是什么了。以下是自己对回调函数的一些理解。

回调函数定义:... 理论一直是我的弱项,定义暂时没法定,以后弄懂再补上,我暂时只懂它的用法orz。

回调函数的基本实现:

// 声明一个函数,它的参数是一个函数fn
function example(fn) {
// 回调前,可以do something
alert('我是回调前执行的代码');
// 存在fn则直接用,不存fn在则用函数表达式的方式声明一个
fn = fn || function() {};
fn(); // 调用传进来的fn
}
// 调用传进来的fn
function callback() {
alert('I am callback!')
}
example(callback); // 调用函数a

这个例子展示回调函数基本实现方法,实现回调的关键是把一个函数当成另一个参数。当然实践中很少用上面方式去使用回调函数,一般把一个匿名函数传入当成回调函数,这种方法在Javascript中使用非常广泛,下面是一个基本的例子。

// 声明一个函数,它的参数是一个函数fn
function example(fn) {
// 回调前,可以do something
alert('我是回调前执行的代码');
// 存在fn则直接用,不存fn在则用函数表达式的方式声明一个
fn = fn || function() {};
fn(); // 调用传进来的fn
}
// 把匿名函数当做参数
example(function() {
alert('I am callback!')
});

使用匿名函数作为参数,不仅可以极少代码,也让代码更好管理,更加灵活。

任何函数都是可以传入参数的,回调函数一样:

// 声明一个函数,它的参数是一个函数fn
function example(a, fn) {
// 回调前,可以do something
alert(a);
// 存在fn则直接用,不存fn在则用函数表达式的方式声明一个
fn = fn || function() {};
fn(m); // 调用传进来的fn
}
// 把匿名函数当做参数
var m = 'I am callback!';
example('我是回调前执行的代码', function(m) {
alert(m)
});

以上就是Javascript回调函数的实现方法和简单用法,关于回调函数的作用,我的理解是:其实,每个函数的定义都是为了实现某些功能,在一个拥有回调函数的函数中,一般把实现一个功能的通用代码写在回调函数前,其实后也可以,而开发者在回调函数中自定义自己需要的功能。文艺一点,就是回调函数让世界更加多姿多彩。

done。

JavaScript回调函数的实现的更多相关文章

  1. 理解 JavaScript 回调函数并使用

    JavaScript中,函数是一等(first-class)对象:也就是说,函数是 Object 类型并且可以像其他一等对象(String,Array,Number等)一样使用.它们可以"保 ...

  2. 【JavaScript】JavaScript回调函数

    什么是Javascript 回调函数? 函数和其他数据一样可以被赋值,删除,拷贝等,所以也可以把函数作为参数传入到另一个函数中. 这个函数就是所谓的回调函数   举例: //不带参数的case fun ...

  3. 理解javascript 回调函数

    ##回调函数定义 百度百科:回调函数 回调函数就是一个通过函数指针调用的函数.如果你把函数的指针(地址)作为参数传递给另一个函数,当这个指针被用为调用它所指向的函数时,我们就说这是回调函数.回调函数不 ...

  4. JavaScript回调函数及数组方法测试

    JavaScript回调函数及数组方法测试 具体代码如下: <!DOCTYPE html> <html lang="en"> <head> &l ...

  5. 如何定义 Java 的回调函数,与 JavaScript 回调函数的区别

    JavaScript 中的回调函数 在 JavaScript 中经常使用回调函数,比如:get 请求.post 请求等异步任务.在我们请求之前以及请求之后,都需要完成一些固定的操作,比如:请求之前先从 ...

  6. JavaScript回调函数的理解

    这里是个人对回调函数的一段理解 <!DOCTYPE html> <html> <head> <title>回调函数</title> < ...

  7. 关于javascript 回调函数

    http://segmentfault.com/q/1010000000212522 如何避免Javascript中回调函数的嵌套? http://javascript.ruanyifeng.com/ ...

  8. javascript 回调函数应用

    回调函数是什么在学习之前还真不知道js回调函数怎么使用及作用了,下面本文章把我在学习回调函数例子给各位同学介绍一下吧,有需了解的同学不防进入参考. 回调函数原理: 我现在出发,到了通知你”这是一个异步 ...

  9. javascript回调函数笔记

    来源于:https://github.com/useaname/blog-study 在Javascript中,函数是第一类对象.意味函数可以像对象一样按照第一类被管理使用.回调函数是从一个叫函数式编 ...

随机推荐

  1. 《剑指offer》-二叉搜索树与双向链表

    输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表.要求不能创建任何新的结点,只能调整树中结点指针的指向. 题目的描述不是很习惯.题目的意思是把二叉树从左到右遍历,相当于双向链表的遍历. 其实 ...

  2. POJ 1862 Stripies 【优先队列】

    题意:科学家发现一种奇怪的东西,他们有重量weight,如果他们碰在一起,总重变成2*sqrt(m1*m2).要求出最终的重量的最小值. 思路:每次选取质量m最大的两个stripy进行碰撞结合,能够得 ...

  3. bzoj 4503

    没有权限号就只能对拍了 我们令?代表的T值=0,然后设出这样一个式子 这样一来,只要T和S在j位置匹配,当且仅当Dj=0,然后我们将这个式子拆开,变成下面那样 思路大概就是这样 最后发现答案应该是在a ...

  4. Codeforces 605C Freelancer's Dreams 凸包 (看题解)

    Freelancer's Dreams 我们把每个二元组看成是平面上的一个点, 那么两个点的线性组合是两点之间的连线, 即x * (a1, b1) + y * (a1, b1) && ...

  5. C#简单画图Draw研究学习

    命名空间:using System.Drawing; Graphics类:有道词典翻译 在C#里是封装一个 GDI+ 绘图图面,此类不能被继承. Pen类:定义用于绘制直线和曲线的对象. 此类不能被继 ...

  6. Python 豆瓣源

    国内的pythoner强烈建议使用豆瓣的pypi源 https://pypi.douban.com/simple/ sudo pip install -i https://pypi.douban.co ...

  7. 使用cxf两个声明导致ObjectFactory 类中发生冲突

    在网上搜了答案都是一样的,没有解决这个问题. 后来发现原因在于 -p com.XXX.XXX这个命令. 解决方法: 只需要把命名包的这个命令去掉. 但要注意,在移动到项目中去时,必须Refactor包 ...

  8. Android高效内存2:让图片占用尽可能少的内存

    Android高效内存:让图片占用尽可能少的内存 一.让你的图片最小化 1.1 大图小图内存使用情况对比 大图:440 * 336    小图:220 * 168 资源目录:xhdpi 小图的高宽都是 ...

  9. html/css实现阴影蒙版覆盖原网页并显示浮框的功能

    在提供用户修改资料/密码等功能的时候,往往希望给用户这样的使用体验,在不跳转,不弹框的情况下完成对这些功能的操作. 这可以通过一种效果来实现,在同一页面下阴影覆盖整个当前网页并使得原网页中元素无法使用 ...

  10. Egret 之 消除游戏 开发 PART 6 Egret elimination game development PART 6

    Egret 之 消除游戏 开发 PART 6 Egret elimination game development PART 6 作者:韩梦飞沙 Author:han_meng_fei_sha 邮箱: ...