乐趣区

关于javascript:什么是函数柯里化

什么是函数柯里化(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));
退出移动版