什么是柯里化
柯里化:是把接受多个参数的函数转变成接受单一参数,返回结果并且返回接受余下的参数的函数的技术。
例如:
// 普通的add函数
function add(x, y) {
return x + y
}
// Currying后
function curryingAdd(x) {
return function (y) {
return x + y
}
}
add(1, 2)
curryingAdd(1)(2)
怎么实现柯里化
前面已经简单的实现了对add()方法进行柯里化,但是不能应对不定参数的情况。下面我们来完善这个方法的实现。
function curryingAdd() {
// 第一次执行时,定义一个数组专门用来存储所有的参数
var _args = Array.prototype.slice.call(arguments);
// 在内部声明一个函数,利用闭包的特性保存_args并收集所有的参数值
var _adder = function() {
_args.push(...arguments);
return _adder;
};
// 利用toString隐式转换的特性,当最后执行时隐式转换,并计算最终的值返回
_adder.toString = function () {
return _args.reduce(function (a, b) {
return a + b;
});
}
return _adder;
}