编程范式(二)
一 函数式编程使用: 常见的函数式编程模型
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