原文链接:https://note.noxussj.top/?source=helloworld
什么是函数柯里化?
函数柯里化(Haskell Brooks Curry),当一个函数有多个参数的时候先传递一部分参数并且调用它(这部分参数后续不会进行改变),然后返回一个新的函数接收剩余的参数并返回结果。
总结
- 柯里化可以让我们给一个函数传递较少的参数得到一个已经记住了某些固定参数的新函数
- 这是一种对函数参数的 "缓存"
- 让函数变的更灵活,让函数的粒度更小
基础案例
案例 1
1function checkAge(arg1) { 2 return function (arg2) { 3 return arg2 >= arg1 4 } 5} 6 7// 检查是否大于 18 岁 8let checkAge18 = checkAge(18) 9 10// 检查是否大于 20 岁 11let checkAge20 = checkAge(20) 12 13console.log(checkAge18(19)) // true 14console.log(checkAge20(19)) // false
案例 2
1// 封装柯里化函数 2function curry(fn) { 3 return function curriedFn(...args) { 4 if (args.length < fn.length) { 5 return function (...args2) { 6 return curriedFn(...args.concat(Array.from(args2))) 7 } 8 } 9 return fn(...args) 10 } 11} 12 13function getSum(a, b, c) { 14 return a + b + c 15} 16 17const curried = curry(getSum) 18 19const fn1 = curried(1) // 返回新函数,接收剩余的参数 20 21const fn2 = fn1(2) // 返回新函数,接收剩余的参数 22 23const fn3 = fn2(3) // 返回结果 6
