什么是函数柯里化
Posted 茴香
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了什么是函数柯里化相关的知识,希望对你有一定的参考价值。
什么是函数柯里化(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));
以上是关于什么是函数柯里化的主要内容,如果未能解决你的问题,请参考以下文章