函数柯里化
柯里化函数概念就是将一个多参数的函数 转化为单一参数的函数;
举个栗子
function add(a,b,c){
return a + b + c;
}
现在需要让这个函数能够实现这么调用 add(1)(2)(3)或者add(1,2)(3) 或者add(1,2,3)
使用curry函数对这个函数进行柯里化
1 2 3 4 5 6 7 8 9 10 11 12 13 | function curry(func){ let argLength = func.length; // 获取函数参数的个数 let curried = (...args) => { // 需要把参数凑齐了 才能执行传入的func函数 ,最终要返回 func(...args) // 所以当参数不够的时候继续执行柯里化,收集参数 if (args.length < argLength) { // 收集参数 return (...rest) => curried(...args, ...rest) } else { // 参数齐了 执行func return func(...args) } }<br> // 返回这个函数<br> return curried}<br><br><br> |
测试:
1 2 3 | let add2 = curry(add) console.log(add2(1, 2)(3)) // 6 console.log(add2(1)(2)(3)) // 6 |
然后我们看到很多地方有箭头函数连续写的
例如let func = a => b => c => {return a+b+c}
其实就是一个柯里化的过程,是属于es6的多次柯里化过程
let func2 = a => (b,c) => (de) => { return a + b +c +de}
调用
func(1)(2)(3)
func2(1)(2,3)(4)
但是我们可以将前两次传参存给一个变量, 这样 最后一次我们再传参再决定求值
例如
let add3 = func(3)
let add4 = add3(1)
现在我们重新定义了两个函数,任何数和add3或者add4相加
add3(3) // 6
add4(4) // 8
所以我们得出以下结论
柯里化函数的功能
- 可以惰性求值
- 可以提前传递部分参数
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
2017-04-14 animate.css使用