偏函数

定义

维基百科中对偏函数的定义为:

In computer science, partial application (or partial function application) refers to the process of fixing a number of arguments to a function, producing another function of smaller arity.

翻译成中文:

在计算机科学中,局部应用是指固定一个函数的一些参数,然后产生另一个更小元的函数。

什么是元?元是指函数参数的个数,比如一个带有 3 个参数的函数被称为三元函数。

function add (a, b, c) {
    return a + b + c
}

// 执行 add 函数,一次传入两个参数即可
add(1, 2, 3) // 6

// 假设有一个 partial 函数可以做到局部应用
var addOne = partial(add, 1, 2)

addOne(3) // 6

假设你已经看过上篇文章《函数柯里化》,你会发现柯里化和偏函数非常相似:

  • 柯里化是将一个多参数函数转换成多个单参数函数,也就是将一个 n 元函数转换成 n 个一元函数。
  • 偏函数则是固定一个函数的一个或者多个参数,也就是将一个 n 元函数转换成一个 n - x 元函数。

模拟实现 partial

根据偏函数的概念,我们可以实现如下:

// 偏函数
function partial (fn) {
    var args = [].slice.call(arguments, 1)
    return function () {
        var newArgs = args.concat([].slice.call(arguments))
        return fn.apply(this, newArgs)
    }
}

function add (a, b) {
    return a + b + this.v
}

// var addOne = add.bind(null, 1);
var addOne = partial(add, 1)

var v = 1
var obj = {
    v: 2,
    addOne
}
console.log(obj.addOne(2)) // 5

参考文献