什么是函数柯里化(curry)

每次调用函数时,它只承受一部分参数,并返回一个函数去解决剩下的参数,直到传递所有参数为止。
举个例子:
const add = (x, y,z) => x + y+z;add(1, 2,3);// 应用柯里化写法const add = x => y =>z => x + y +z;add(1)(2)(3);

柯里化有什么作用?

次要有3个作用: 参数复用、提前返回和 提早执行
  • 参数复用:拿下面add函数举例,只有传入一个参数z,计算结果就是1+2+z的后果,1和2这两个参数就能够间接复用了。
  • 提前返回与提早执行: 每次调用函数时,它只承受一部分参数,并返回一个函数去解决剩下的参数(此处为提前返回),直到传递所有的参数为止(此处为提早执行)

面试分享

编写一个求和函数,反对这三种写法:add(1, 2, 3);add(1, 2)(3);add(1)(2, 3);

// 参数个数能够间接通过函数的.length属性拜访。  传入的参数大于等于原始fn 的参数个数,则间接执行该函数, 传入的参数小于原始函数fn的参数个数时,则持续对以后函数进行柯里化,返回一个承受所有参数(以后参数与残余参数)的函数const curry = (fn,...args)=> args.length>=fn.length?fn(...args):(..._args)=>curry(fn,...args,..._args)function add1(x,y,z){  return x+y+z}const add = curry(add1);console.log(add(1, 2, 3));console.log(add(1)(2)(3));console.log(add(1, 2)(3));console.log(add(1)(2, 3));