Front-end-learning-to-organize-notes
Front-end-learning-to-organize-notes copied to clipboard
函数柯里化
// 普通的add函数
function add(x, y) {
return x + y
}
// Currying后
function curryingAdd(x) {
return function (y) {
return x + y
}
}
add(1, 2) // 3
curryingAdd(1)(2) // 3
实际上就是把add函数的x,y两个参数变成了先用一个函数接收x然后返回一个函数去处理y参数。 就是只传递给函数一部分参数来调用它,让它返回一个函数去处理剩下的参数。 用处:
- 参数复用
- 提前确认
- 延迟运行
function curry(fn, args = []) {
return function(){
let rest = [...args, ...arguments];
if (rest.length < fn.length) {
return curry.call(this,fn,rest);
}else{
return fn.apply(this,rest);
}
}
}
//test
function sum(a,b,c) {
return a+b+c;
}
let sumFn = curry(sum);
console.log(sumFn(1)(2)(3)); //6
console.log(sumFn(1)(2, 3)); //6
function curry(fn, args = []) {
console.log([...arguments]) // 空\1\1,2
return function () {
console.log([...arguments])//1\2\3
console.log([...args])//空\1\1,2
let rest = [...args, ...arguments]
if (rest.length < fn.length) {
return curry.call(this, fn, rest)
} else {
return fn.apply(this, rest)
}
}
}
//test
function sum(a, b, c) {
return a + b + c
}
let sumFn = curry(sum)
console.log(sumFn(1)(2)(3)) //6
console.log(sumFn(1)(2, 3)) //6