javascript 函数柯里化
实现add(1)(2)(3); add(1,2,3)
function add(){
// let _args = [].slice.call(arguments)
let _args = Array.prototype.slice.call(arguments)
var _adder = function(){
_args.push(...arguments)
return _adder
}
_adder.toString = function() {
return _args.reduce((a,b) => {
return a+b
},0)
}
return _adder
}
console.log(typeof add(1)); //function
console.log(add(1)(2)(3)); //6
console.log(add(1,2,3)); //6
调用add函数时,返回的是一个函数。在打印该函数时,可利用toString隐式转换的特性,改写toString函数,返回数组每一项的和
function add(a,b) {
return a+b;
}
function curry(fn) {
let args = [...arguments].slice(1);
return function() {
let finalArgs = [...arguments, ...args];
return fn.apply(null, finalArgs);
}
}
let curryAdd = curry(add, 5);