什么是函数柯里化(Currying)
维基百科:
在计算机科学中,柯里化(英語:Currying),又译为卡瑞化或加里化,是把接受多个参数的函数变换成接受一个单一参数(最初函数的第一个参数)的函数,并且返回接受余下的参数而且返回结果的新函数的技术。
简单理解就是把一个有n个参数的函数转换成n个嵌套的函数,每个函数只接受一个参数,并返回一个新函数。也就是把fn(a,b,c)
转化为fn(a)(b)(c)
。
例子
例如一个函数接受a, b, c三个参数,返回它们的和:
function sum(a, b, c) {
return a + b + c
}
运行此函数,我们在参数中依次传入1,2,3,返回6。
sum(1, 2, 3) // 6
函数柯里化之后:
function fn(a) {
return (b) => {
return (c) => {
return a + b + c
}
}
}
fn(1)(2)(3) // 6
我们把sum(1, 2, 3)
变成了fn(1)(2)(3)
的形式。通过把一个多参函数转换成一系列嵌套的函数,每个函数依次接受一个参数,这就是函数柯里化。这里用到了高阶函数和闭包相关的知识,函数柯里化其实是高阶函数的应用。
什么是偏函数(Partial function)
它是指使用一个函数并将其应用一个或多个参数,但不是全部参数,在这个过程中创建一个新函数,这个函数用于接受剩余的参数。偏函数解决这样的问题:如果我们有函数是多个参数的,我们希望能固定其中某几个参数的值。
例子
/*
function sum(a, b, c) {
return a + b + c
}
*/
// 使用偏函数的写法
function fn(a) {
return (b, c) => {
return a + b + c
}
}
//变量foo接受返回的新函数
var foo = fn(1)
//在调用的时候传入剩余的参数
foo(2,3) // 6
总结
柯里化和偏函数都是用于将多个参数函数,转化为接受更少参数函数的方法,它们都能够固定参数。但是其中不同之处在于:
- 柯里化是将函数转化为多个嵌套的一元函数,也就是每个函数只接受一个参数。
- 偏函数可以接受不只一个参数,它被固定了部分参数作为预设,并可以接受剩余的参数。
网友评论