在搜索了部分资料后,对函数的柯里化和组合化进一步了解。其中感觉比较好的一篇文章www.zhangshengrong.com/p/OQNzel8Ea…
柯里化函数
是把接收多个参数的函数,变成接受一个单一参数(最初函数的第一个参数)的函数,并且返回接受余下的参数,而且返回结果的新函数的技术;个人理解就是:函数返回了一个一个接收新参数的函数
举个栗子
平常的相加函数
let sum = (x,y,z) => x+y+z
sum(1,2,3) // 此时只是一个简单的纯函数 1+2+3
柯里化
function add(x) {
return function(y) {
return function(z) {
return x+y+z
}
}
}
console.log(add(1)(6)(7)) 14
// 就是先将1传入 ,返回一个传入6的函数,这个传入6的函数又返回一个传入7的函数,传入7的这个函数执行1+6+7 = 17
组合函数
当需要对数据进行一次函数1,函数2的处理,这个数据就可以用到组合函数。举个栗子
let kaixiao = [
{
type: "日常",
price: 200,
},
{
type: "日常",
price: 121,
},
{
type: "吃饭",
price: 300,
},
{
type: "喝酒",
price: 400,
},
{
type: "甜品",
price: 500,
},
{
type: "游玩",
price: 600,
},
]
let getType = type => type.filter((item) => item.type == '日常')
// 获取到类型为日常的数组开销
let getMoney = money => money.map((item) => item.price).reduce((sum,item) => sum + item,0)
// 计算开销数量
const compost = (func1,func2) => {
return source => func2(func1(source))
}
// 这里指的是 compost函数返回了一个函数,这个函数需要一个参数,func1函数拿到这个参数后执行的结果再由func2执行。
//(也就是返回 func2执行func1执行参数的结果的结果)
// 要知道日常开销的花费总额 就需要先知道日常这一种类的开销数据,然后在进行处理,这个
// 时候就可以用到组合函数
// 个人理解组合函数也算柯里化的一种,只是参数是函数而已
const sumMoney = compost(getType,getMoney)
console.log(sumMoney(kaixiao), 'asdasd')