函數式編程的入門(一)

  隨着對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);

  

組合協做起來很是有助於實現這種模式。

相關文章
相關標籤/搜索