函数式编程的入门(一)

  随着对js的深刻,有一种编程思想愈加重要,那就是 函数式编程思想。javascript

  函数式编程思想就是 将复杂的函数转变成为简单的函数。经过嵌套的函数调用来实现这一过程java

  函数式编程一般有一下几个特色:es6

    1. 函数是 “第一等公民”:函数如其余数据类型同样,能够赋值,能够做为参数和返回值编程

    2.函数有明确的输入和输出:至关于高中数学中的映射,对于相同的输入,只会返回相同的输出数组

    3.函数无反作用:不会对dom进行操做,不会修改全局变量缓存

    4.无外部影响:函数的运行不依赖外部的变量,只会受入参的影响。dom

  函数式编程的的核心:函数式编程

    1.纯函数函数

      相同的输入只会获得相同的输出,无反作用,无外部依赖性能

      Array对象方法中的 slice 和 splice,slice是不改变原数组,而splice会修改原数组,因此不纯洁

    2.函数柯里化

      将一个多参数的函数转为单个参数的函数称为函数的柯里化,柯里化以后的函数称为柯里化函数。

    

var add=function(x,y){//普通函数
   return x+y       
}

add(1,2)//3

 

var add=function(x){//柯里化函数
    return function(y){
        return x+y         
    }
}
let add=x=>y=>x+y//es6的写法,是否是很简洁
add(1)(2)//3

  柯里化函数相比于不一样函数更加高效,简洁。

  柯里化函数因为只有一个参数,在运行时会读取缓存,于是能够提升性能

     3.函数组合

      函数组合顾名思义就是把多个函数组合在一块儿

  

//两个函数的组合
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 

    4.Point Free

    pointfree 模式指的是,永远没必要说出你的数据。它的意思是说,函数无须说起将要操做的数据是什么样的。纯函数、函数柯里化以及函数

// 非 pointfree,由于提到了数据:word
var snakeCase = function (word) {
  return word.toLowerCase().replace(/\s+/ig, '_');
};

// pointfree
var snakeCase = compose(replace(/\s+/ig, '_'), toLowerCase);

  

组合协做起来很是有助于实现这种模式。

相关文章
相关标签/搜索