闭包的应用

82 阅读2分钟

柯里化与偏函数

柯里化(英语:Currying),又译为卡瑞化或加里化,是把接受多个参数的函数变换成接受一个单一参数(最初函数的第一个参数)的函数,并且返回接受余下的参数而且返回结果的新函数的技术。

柯里化是把接受 n 个参数的 1 个函数改造为只接受 1个参数的 n 个互相嵌套的函数的过程。也就是 fn (a, b, c)fn(a,b,c) 会变成 fn (a)(b)(c)fn(a)(b)(c)。

偏函数应用相比之下就 “随意” 一些了。偏函数是说,固定你函数的某一个或几个参数,然后返回一个新的函数(这个函数用于接收剩下的参数)。你有 10 个入参,你可以只固定 2 个入参,然后返回一个需要 8 个入参的函数 —— 偏函数应用是不强调 “单参数” 这个概念的。它的目标仅仅是把函数的入参拆解为两部分。

偏函数应用

除了约束条件与柯里化略有不同,偏函数在动机和实现思路上都与柯里化一致 —— 动机就是为了 “记住” 函数的一部分参数,实现思路就是走闭包

仍然是上面的例子。我们单纯地把一口气传入 3 个入参,拆分为先传 1 个、再传 2 个,这样就算实现了偏函数应用:

原有的函数形式与调用方法:

function generateName(prefix, type, itemName) { // 调用时一口气传入3个入参
    return prefix + type + itemName
}
var itemFullName = generateName('大卖网', '母婴', '奶瓶');

偏函数应用改造:

function generateName(prefix) { // 把3个参数分两部分传入
    return function(type, itemName) {
        return prefix + type + itemName 
    }
}
var itemFullName = generateName('大卖网')('母婴', '奶瓶');