JavaScript-建立Curry函式

摘要:JavaScript-建立Curry函式

在呼叫涵式的時候,傳入的參數有時會一模一樣,那該怎麼保留這些重複的參數呢?就可以透過Curry來做優化

參考以下簡單程式碼

function sum(x, y, z) {
    return x + y + z;
}
 
sum(1, 2, 3); //6
sum(1, 2, 4); //7
sum(1, 2, 5); //8

以上為普通的加法運算,目前只有一個參數在做變動,那如果輸入參數有多個而變動參數只有一個,這樣的做法是不是就不太好了呢?

 

所以我們就可以透過建立Curry函式來做優化

function curry(fn) {
    var slice = [].slice;
    var curry_args = slice.call(arguments, 1);//curry's args
 
    return function () {
        var args = slice.call(arguments); // fun's args
        var new_args = curry_args.concat(args);
 
        return fn.apply(null, new_args);
    }
}
var new_sum = curry(sum, 1, 2);
new_sum(3); //6
new_sum(4); //7
new_sum(5); //8

這樣是不是有看起來有比較好呢?XD

 

但建立Curry函式還有一種更簡單的方法,就是bind

也是沿用上面的加法函式作範例

var new_sum = sum.bind(null, 1, 2);
new_sum(3); //6
new_sum(4); //7
new_sum(5); //8

 

這樣是不是非常輕鬆容易呀~~~

 

 

 

 

如果以上有錯誤的地方歡迎指正唷~~~