函数柯里化

100 阅读2分钟
函数柯里化
  • 柯里化的定义,接收一部门分参数,返回一个函数接收剩余参数,接收足够参数后,执行原函数
  • 柯里化其实是函数式编程的一个过程,在这个过程中,我们能把一个带有多个参数的函数转换成一系列的嵌套函数。它返回一个新的函数,这个新函数期望传入下一个参数。
  • 主要作用和特点就是参数复用、提前返回和延迟执行
  • 柯里化把一个多参数函数转换为一系列只带单参数的函数
  • 一个简单的柯里化函数
function muti(a) {
    return function(b) {
        return function(c) {
            return a * b * c
        }

    }
}
console.log(muti(2)(3)(4))
柯里化函数的作用
  1. 编写小模块的代码,可以更轻松的重用和配置,就像运行npm
  2. 柯里化实际是把简单的问题复杂化,但是复杂的同时,使函数更多的选择。本质就是降低通用性,提高适用性
  3. 可以通过一个变量绑定传入第一个值函数,调用该变量输入剩下的函数(这样子就不用重复输入第一个参数)
function volume(l) {
    return (w, h) => {
        return l * w * h
    }
}
const hCy = volume(1);
console.log(hCy(2, 3));//6
通用的可理化函数
  • 开发一个函数,它能接受任何函数并返回一个柯里化版本的函数
function currying(fn, ...args) {
    if (args.length >= fn.length) {
        return fn(...args)
    }
    return function(...args2) {
        return currying(fn, ...args, ...args2)
    }
}

function add(a, b, c, d) {
    return a + b + c + d
}

// 使用柯里化方式来使 add 转化为一个一元函数
let addPreThreeCurry = currying(add)(1)(2)(3)
console.log(addPreThreeCurry(4)) // 10
  • 递归的思路,当获取的参数个数大于或者等于 fn 的参数个数的时候,就证明参数已经获取完毕,所以直接执行 fn 了,如果没有获取完,就继续递归获取参数。
  • 前端学习交流群:784409139