454 字
2 分钟
实现柯里化函数
柯里化函数
定义:
函数柯里化又叫部分求值,维基百科中对柯里化 (Currying) 的定义为:
在数学和计算机科学中,柯里化是一种将使用多个参数的函数转换成一系列使用一个参数的函数,并且返回接受余下的参数而且返回结果的新函数的技术。
用大白话来说就是只传递给函数一部分参数来调用它,让它返回一个新函数去处理剩下的参数
作用:
柯里化函数的主要作用是将一个多参数的函数转换成多个单参数的函数,从而使得函数可以逐步调用,逐步传递参数,直到所有参数都传递完毕,最终得到结果。
优势:
柯里化的好处在于可以将复杂的函数分解为一系列简单的函数,使得代码更加清晰易懂,易于维护和复用。
提高代码可读性:通过将复杂的函数分解为一系列简单的函数,使得代码更加清晰易懂,易于阅读和维护。
提高代码复用性:通过将函数分解为一系列的函数,可以避免重复的代码,提高代码的复用性。
个人感悟:
柯里化即颗粒化,让一个大颗粒函数可以自由的拆分为多个颗粒度更小的函数逐步传参,从而实现更灵活的调用方式。
且柯里化函数一般用尾递归来便于实现
代码实现:
function toCurring(fn,...arg){
if(fn.length === arg.length){
return fn(...arg)
}
return (...items) => {
return toCurring(fn,...arg,...items)
}
}
function sum(a,b,c){
return a + b + c
}
const currySum = toCurring(sum)
console.log(currySum(1,2,3)) // 6
console.log(currySum(1,2)(3)) // 6
console.log(currySum(1,2,3)) // 6
const currySum1 = currySum(1,2)
console.log(currySum1(3)) // 6
console.log(currySum1(4)) // 7