函数柯里化粗解释
函数柯里化
把一个多参数的函数,转化为单参数函数
fn(a,b,c)=>fn(a)(b)(c)
- fn(a)(b)(c)每次只能接收一个参数
- 使用场合:函数式编程规定要求多参数函数转化为单参数函数,固定的值绑定固定的元素,对应的输入绑定对应的输出
实例:
//一个函数
function add(a,b){
return a+b
}
//我想要转化的数据
add(1,2)
// 希望转化为 add(1)(2)
//声明一个转化函数
function addCurry(a){
return function (b){
return a+b
}
}
//此时 Curry(1)(2)的效果与 add(1,2) 是一致的
addCurry(1)(2)
柯里化函数
//柯里化工具函数
function curry(fn){
//柯里化函数内部再包裹一个自执行函数
return function curried(...args){}
//使用...args来接收所有传入的参数,本例中 ...args=[1,2,3]
//如果长度一致则可以执行逻辑运算
if(args.length===fn.length){
//fn.length就是 fn函数的参数长度
//使用return把
return fn(...args)
}else{
//如果长度并不一致则先需要把新添加进来的参数收集起来
returun function (){
//...args的全称是 ...("拓展运算符")+argument
return curried(...args.concat(Array.from(argument))){}
//使用数组方法.concat() 用于连接两个或多个数组。 因为此时的argument 是一个伪数组,所以使用Array.from(argument) 转化为数组形式
}}}
//声明定义,把addCurry1函数的值通过柯里化调用到上方的add自定义相加函数之中
let addCurry1=curry(add)
//调用函数
addCurry1(1)(2)(3)