zoukankan      html  css  js  c++  java
  • 《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

  • 相关阅读:
    Git简介
    git 目录
    版本控制系统介绍
    python 爬虫 基于requests模块发起ajax的post请求
    python 爬虫 基于requests模块发起ajax的get请求
    POJ 2575
    POJ 2578
    POJ 2562
    POJ 2572
    POJ 2560
  • 原文地址:https://www.cnblogs.com/hanxuming/p/5831294.html
Copyright © 2011-2022 走看看