• 《JS权威指南学习总结--8.8.2高阶函数》


    内容要点:

         所谓高阶函数(higher-order function)就是操作函数的函数,它接收一个或多个函数作为参数,并返回一个新函数。

         例1:

           //这个高阶函数返回一个新的函数,这个新函数将它的实参传入f(),并返回f的返回值的逻辑非

            function not(f){

              return function(){   //返回一个新的函数

              var result = f.apply(this,arguments); //调用f()

              return !result;      //对结果求反

               };

            }

          var even = function(x){ //判断a是否为偶数的函数

                return x%2 ===0;

         };

         var odd = not(even); //一个新函数,所做的事情和even()相反

         [1,1,3,5,5].every(odd); //=>true:每个元素都是奇数

         代码分析:

              上面的not()函数就是一个高阶函数,因为它接收一个函数作为参数,并返回一个新函数。

         例2:

           mapper()函数,它也是接收一个函数作为参数,并返回一个新函数,这个新函数将一个数组映射到另一个使用这个函数的数组上。这个函数使用了之前定义的map()函数,但要首先理解这两个函数的不同:

            //所返回的函数的参数应当是一个实参数组,并对每个数组元素执行函数f(),并返回所有计算结果组成的数组,可以对比一下这个函数和上文提到的map()函数。

            function mapper(f){

                return function(a){ return map(a,f);};

            }

             var increment = function(x){ return x+1; };

             var incrementer = mapper(increment);

             incrementer([1,2,3]) //=>[2,3,4]

         例3:

           接收两个函数f()和g(),并返回一个新的函数用以计算f(g()):

           //返回一个新的可以计算f(g(...))的函数

           //返回的函数h()将它所有的实参传入g(),然后将g()的返回值传入f()

          //调用f()和g()时的this值和调用h()时的this值是同一个this

           function compose(f,g){

               return function(){

                  //需要给f()传入一个参数,所以使用f()的call()方法

                  //需要给g()传入很多参数,所以使用g()的apply()方法

                  return f.call(this,g.apply(this,arguments));

                };

            }

            var square = function(x){ return x*x;};

            var sum = function(x,y){ return x+y;};

            var squareofsum = compose(square,sum);

           squareofsum(2,3) //=>25

  • 相关阅读:
    2017.3.11[bzoj2440][中山市选2011]完全平方数
    2017.3.6[hihocoder#1415]后缀数组三·重复旋律3
    2017.3.4[hihocoder#1407]后缀数组二·重复旋律2
    [NOI2013]快餐店
    [HNOI2014]米特运输
    [HNOI2015]亚瑟王
    [JLOI2013]卡牌游戏
    [SDOI2010]地精部落
    [ZJOI2007]棋盘制作
    [AHOI2009]中国象棋
  • 原文地址:https://www.cnblogs.com/hanxuming/p/5831294.html
Copyright © 2020-2023  润新知