把接受多个参数的函数变换成接受一个单一参数 (最初函数的第一个参数)的函数,并且返回接受余下的参数且返回结果的新函数的技术。
例如: add(1,2,3,4)变成currying(sumFn)(1)(2)(3)(4)
-
首先是函数add 变成 函数 currying
-
其次转变后的函数currying要满足的条件
返回一个函数用来接收余下参数------ 由函数remain来完成
在remain函数返回新结果-------- 由sumFn函数来完成
`
const sumFn = (...arguments) => {// 不定长参数求和
return arguments.reduce((a, b) => a + b); //用来返回结果的
};
//currying函数要接收一个参数,这个参数func是一个函数,也就是用来返回结果的函数
var currying = function (func) {
const args = []; //存已经输入的参数
return function remain(...rest) { // 返回可以接收余下参数的函数remian
// 判断是不是需要执行函数的情况 如果传入的参数长度为0,
if (rest.length === 0)
return func(...args); //那就需要执行求和函数(带已经输入的参数)func也就是sumFn函数
// 如果还有参数输入,
else {
args.push(...rest); //继续拼接参数,
return remain; //并且返回函数自身,用来继续接收后边的参数
}
};
};
console.log(currying(sumFn)(1, 2, 3)(4, 5)(6)()); // 21`