柯里化函数---高阶函数编程
也不知道什么时候身边问这个题目的人多了起来,内部讨论的时候也说到这个问题,
(柯里化函数编程)这种函数编程模式感觉就是多个参数变为单一参数连续传入的链式操作。
简单实现
<!--普通函数-->
function add(a,b) {
return a + b
}
<!--柯里化函数-->
function add(a){
return function(b) {
return a + b
}
}
这样参数就可以连续调用
柯里化的实现功能
- bind的实现
Function.prototype.bind = function(context) {
var me = this;
var args = Array.prototype.slice.call(arguments, 1);
return function() {
var innerArgs = Array.prototype.slice.call(arguments);
var finalArgs = args.concat(innerArgs);
return me.apply(contenxt, finalArgs);
}
}
其实写的不好有兴趣的去MDN bind实现的代码实现吧
反柯里化
就是将各种链式操作反馈成一个传参
function uncurrying(fn) {
return function(...args) {
var ret = fn;
for (let i = 0; i < args.length; i++) {
ret = ret(args[i]); // 反复调用currying版本的函数
}
return ret; // 返回结果
};
}