编程范式(二)

一 函数式编程使用: 常见的函数式编程模型 

1 高阶函数:一个函数可以接收其他函数作为参数,这种函数便称为高阶函数;常用高阶函数:Array: map(); reduce(); filter()等等;

2 函数柯理化(Currying):又称部分求值(Partial Evaluation),是把接受多个参数的函数变换成接受一个单一参数(最初函数的第一个参数)的函数,并且返回接受余下的参数而且返回结果的新函数的技术。

    柯理化函数作用:1 参数复用 2 延迟运行 。    

    实现一个简单的柯理化函数:

 function curryIt(fn) {
    // 参数fn函数的参数个数
    var n = fn.length;
    var args = [];
    return function (arg) {
      args.push(arg);
      if (args.length < n) {
        return arguments.callee; // 返回这个函数的引用
      } else {
        return fn.apply(this, args);
      }
    };
  }
  function add(a, b, c) {
    return [a, b, c];
  }

  var c = curryIt(add);
  var c1 = c(1);
  var c2 = c1(2);
  var c3 = c2(3);
  console.log(c3); //[1, 2, 3]

 

3 函数组合(Composition):函数式编程的一个特点是通过串联函数来求值。然而,随着串联函数数量的增多,代码的可读性就会不断下降。函数组合就是用来解决这个问题的方法。

假设有一个 compose 函数,它可以接受多个函数作为参数,然后返回一个新的函数。当我们为这个新函数传递参数时,该参数就会「流」过其中的函数,最后返回结果。 

//两个函数的组合
var compose = function(f, g) {
    return function(x) {
        return f(g(x));
    };
};

//或者
var compose = (f, g) => (x => f(g(x)));
var add1 = x => x + 1;
var mul5 = x => x * 5;
compose(mul5, add1)(2);// =>15 

 

 

 

 

 

posted @ 2021-04-04 10:04  TerryMin  阅读(143)  评论(0编辑  收藏  举报