zoukankan      html  css  js  c++  java
  • Javascript中的高阶函数介绍

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

    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"

      从上面的情况来看,高阶函数可以使代码更简洁、高效。自然而然地我们也可以创建下面这样一个函数:

    var Moqi = function(p1){
        return  function (p2){
            return function(p3){
                return p1 + ',' + p2 + ' ' +p3;
            }
        };
    };
    Moqi('Hello')('World')('Phodal')
    //"Hello,World Phodal"

    还原高阶函数

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

    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
  • 相关阅读:
    [转载]ASP.NET实现数字和字符相混合的验证码
    [分享]软件开发全套规范
    [转载]混沌理论简介
    [原创]利用WM_COPYDATA实现进程间通信
    [转载]I like the subtle...
    [原创]DES算法的介绍以及实现(含上次DES程序1.0的源码)
    [转载]高校自动排课系统的实践
    [公告]对DES算法源码的bug道歉
    [转载]基于混沌理论的资本投资研究
    使用 异步多线程TCP Socket 实现进程间通信(VC 6.0 , BCB6.0调试通过)
  • 原文地址:https://www.cnblogs.com/goloving/p/8367379.html
Copyright © 2011-2022 走看看