什么是柯里化?

柯里化就是将函数内大量的逻辑分到一个个小函数中处理

柯里化的优势

  1. 确保了单一职责的原则,每个函数的职责清晰明了
  2. 对代码逻辑的复用,对确定的函数无需多次调用

    什么是自动柯里化?

    就是将一个普通函数,自动转换成柯里化函数
  1. function myCurrying(fn) {
  2. // 判断当前已经接收的参数的个数,与参数本身需要接收的参数是否一致
  3. // 1.当已经传入的参数 大于等于 需要的参数时,就执行函数
  4. return function curried(...args) {
  5. if (args.length >= fn.length) {
  6. // 用apply的原因是防止在外界显示绑定了对象,与外界保持一致
  7. return fn.apply(this, args)
  8. } else {
  9. // 没有达到个数时,需要返回一个新的函数,继续接收所需参数
  10. return function (...args2) {
  11. // 接收到参数时 递归调用 继续判断参数是否满足
  12. return curried.apply(this, [...args, ...args2])
  13. }
  14. }
  15. }
  16. }
  17. function add(num1, num2) {
  18. num1 = num1 + 2
  19. num2 = num2 * 2
  20. return num1 + num2
  21. }
  22. const curryingAdd = myCurrying(add)
  23. console.log(curryingAdd(10, 20))
  24. console.log(curryingAdd(10)(20))