JavaScript函數式編程-函數組合應用

定義:

**函數組合:**由若干個純函數、偏函數、柯里化函數組合成一個新的函數,同時,形成數據傳遞。

用途:

挑選了一系列所需要的函數,把他們組合在一起,可以實現公共合作的效果

最基本的函數組合:

function compose (fn,gn){  //fn gn 是兩個函數
            return function (xn){
                return fn( gn(xn) );   //自右向左依次執行,稱爲左傾,使得x自右向左傳遞
            }
        }

此時的compose函數不具有普遍意義,我們稍作修改:

function compose(){
              
                var args = Array.prototype.slice.call(arguments);  // 把這個變成數組操作
                var len = args.length - 1; 
                return function (x){
                    // args[len](x)
                    var result = args[len](x);
                        while(len--){
                            result = args[len](result);
                        }
                    return result;
                }
            }

然後reduce優化代碼:

function compose1(){
             
                var args = Array.prototype.slice.call(arguments);
                var len = args.length - 1; 
                return function (x){
                    return args.reduceRight(function (res,cb) { 
                       return cb(res);
                    },x);
                }
            }

ES6.0寫法:

const compose2 = (...args) => x => args.reduceRight((res,cb) => cb(res) , x);

自左向右同理處理,通常稱爲“通道”,寫法把reduceRight緩存reduce就行

function compose3(){
                var args = Array.prototype.slice.call(arguments);
                var len = args.length - 1; 
                return function (x){
                    return args.reduce(function (res,cb) { 
                       return cb(res);
                    },x);
                }
            }

例子(簡單):實現字符串翻轉後用-分割

var newCompose = compose3(toUpperCase,split,reverse);
var ans = newCompose('time');

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章