偏函数
定义
维基百科中对偏函数的定义为:
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