Javascript中的高阶函数介绍


Posted in Javascript onMarch 15, 2015

这是一个有趣的东西,这或许也在说明Javascript对象的强大。我们要做的就是在上一篇说到的那样,输出一个Hello,World,而输入的东西是print('Hello')('World'),而这就是所谓的高阶函数。

高阶函数

高阶看上去就像是一种先进的编程技术的一个深奥术语,一开始我看到的时候我也这样认为的。

Javascript的高阶函数

然而,高阶函数只是将函数作为参数或返回值的函数。以上面的Hello,World作为一个简单的例子。

var Moqi = function(p1){

    this.add = function (p2){

        return p1 + ' ' + p2;

    };

    return add;

};

我们便可以这样使用这个函数

console.log(Moqi('Hello')('World'));

或许这个过程有点混乱,看看详细一点的。
> typeof Moqi('Hello')

<- "function"

> Moqi('Hello')

<- function (p2){

        return p1 + ' ' + p2;

    }

也就是说实际上Moqi('Hello')是一个函数,Moqi('Hello')
> var m = Moqi('Hello')        

 > m('World')

 > "Hello,World"

 

从上面的情况来看,高阶函数可以使代码更简洁、高效。自然而然地我们也可以创建一个函数,以便于:
 > Moqi('Hello')('World')('Phodal')

 > "Hello,World Phodal"

于是就有了这样一个函数
var Moqi = function(p1){

    return  function (p2){

        return function(p3){

            return p1 + ',' + p2 + ' ' +p3;

        }

    };

};

还原高阶函数

越来越复杂,需要引入高阶函数抽象的信号是出现重复或者相似的代码。然后,我们先一步步还原到之前的函数:

var Moqi = function(p1){

     this.add =  function (p2){

        return function(p3){

            return p1 + ',' + p2 + ' ' +p3;

        }

    };

    return this.add;

};

接着再创建一个新的函数
var Moqi = function(p1){

     this.add =  function (p2){

        this.add1 = function(p3){

            return p1 + ',' + p2 + ' ' +p3;

        };

        return this.add1;

    };

    return this.add;

};

使用javascript中的call方法,就会有:
var Moqi = function(p1){

    var self = this;
    function fd(p2) {

        this.add1 = function (p3) {

            return p1 + ',' + p2 + ' ' + p3;

        };

    }
    self.add =  function (p2){

        fd.call(this, p2);

        return this.add1;

    };

    return self.add;

};

高阶函数实例

上面的例子只是为了好玩,下面的例子是真正的运用。

add = function(a,b){

    return a + b;

};
function math(func,array){

    return func(array[0],array[1]);

}
console.log(math(add,[1,2]));
> math(add,[1,2])

< 3

在上面的例子中传进去的add是一个参数,而在return的时候刚是一个函数。如在jQuery中有一个函数用于
// Convert dashed to camelCase; used by the css and data modules

// Microsoft forgot to hump their vendor prefix (#9572)

camelCase: function( string ) {

    return string.replace( rmsPrefix, "ms-" ).replace( rdashAlpha, fcamelCase );

},

也是这样的运用,可见高阶函数对于掌握好JS的重要。。
Javascript 相关文章推荐
JavaScript中的this关键字介绍与使用实例
Jun 21 Javascript
js监听鼠标事件控制textarea输入字符串的个数
Sep 29 Javascript
jquery实现公告翻滚效果
Feb 27 Javascript
JS实现霓虹灯文字效果的方法
Aug 06 Javascript
JavaScript的Backbone.js框架的一些使用建议整理
Feb 14 Javascript
Node.js刷新session过期时间的实现方法推荐
May 18 Javascript
jQuery手指滑动轮播效果
Dec 22 Javascript
JS常见DOM节点操作示例【创建 ,插入,删除,复制,查找】
May 14 Javascript
vue改变循环遍历后的数据实例
Nov 07 Javascript
如何使用gpu.js改善JavaScript的性能
Dec 01 Javascript
jQuery实现电梯导航模块
Dec 22 jQuery
element el-table表格的二次封装实现(附表格高度自适应)
Jan 19 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
jQuery+PHP实现动态数字展示特效
Mar 14 #Javascript
jQuery+slidereveal实现的面板滑动侧边展出效果
Mar 14 #Javascript
You might like
Yii框架获取当前controlle和action对应id的方法
2014/12/03 PHP
php通过文件流方式复制文件的方法
2015/03/13 PHP
如何实现php图片等比例缩放
2015/07/28 PHP
win10下 php安装seaslog扩展的详细步骤
2020/12/04 PHP
javascript 一些用法小结
2009/09/11 Javascript
Jquery绑定事件(bind和live的区别介绍)
2013/08/23 Javascript
jquery导航制件jquery鼠标经过变色效果示例
2013/12/05 Javascript
js获取url参数代码实例分享(JS操作URL)
2013/12/13 Javascript
angularjs客户端实现压缩图片文件并上传实例
2015/07/06 Javascript
javascript 正则表达式去空行方法
2017/01/24 Javascript
详解vue2.0+vue-video-player实现hls播放全过程
2018/03/02 Javascript
JavaScript数据结构与算法之检索算法示例【二分查找法、计算重复次数】
2019/02/22 Javascript
解析原来浏览器原生支持JS Base64编码解码
2019/08/12 Javascript
es6数组的flat(),flatMap()函数用法实例分析
2020/04/18 Javascript
Python中if __name__ == &quot;__main__&quot;详细解释
2014/10/21 Python
利用Python自动监控网站并发送邮件告警的方法
2016/08/24 Python
Python实现将文本生成二维码的方法示例
2017/07/18 Python
python使用邻接矩阵构造图代码示例
2017/11/10 Python
python3获取当前文件的上一级目录实例
2018/04/26 Python
python实现感知器算法(批处理)
2019/01/18 Python
python面向对象 反射原理解析
2019/08/12 Python
用pytorch的nn.Module构造简单全链接层实例
2020/01/14 Python
python pymysql链接数据库查询结果转为Dataframe实例
2020/06/05 Python
python代数式括号有效性检验示例代码
2020/10/04 Python
在HTML5中使用MathML数学公式的简单讲解
2016/02/19 HTML / CSS
如何让pre和textarea等HTML元素去掉滚动条自动换行自适应文本内容高度
2019/08/01 HTML / CSS
说说在weblogic中开发消息Bean时的persistent与non-persisten的差别
2013/04/07 面试题
护士求职推荐信范文
2013/11/23 职场文书
网络专业学生个人的自我评价
2013/12/16 职场文书
本科生的职业生涯规划范文
2014/01/09 职场文书
送餐员岗位职责范本
2014/02/21 职场文书
中学生演讲稿
2014/04/26 职场文书
优秀实习生主要事迹
2014/05/29 职场文书
导航工程专业自荐信
2014/09/02 职场文书
爱的奉献演讲稿
2014/09/10 职场文书
SQL注入的实现以及防范示例详解
2021/06/02 MySQL