维基百科中对偏函数(Partial)的定义为:
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.
在计算机科学中,局部应用是指固定一个函数的一些参数,然后产生另一个更小元的函数。
什么是元?
元是指函数参数的个数,比如一个带有两个参数的函数被称为二元函数。
🌰 示例:
function add(a, b) {return a + b;}// 执行 add 函数,一次传入两个参数即可add(1, 2); // 3// 假设有一个 partial 函数可以做到局部应用var addOne = partial(add, 1);addOne(2); // 3
偏函数与柯里化十分相像:
bind
函数可以让我们传入一个或多个预设的参数,之后返回一个新函数,并拥有指定的 this
值和预设参数。当绑定函数被调用时,这些参数会被插入到目标函数的参数列表的开始位置,传递给绑定函数的参数跟在它们后面。
function addition(x, y) {return x + y;}const plus5 = addition.bind(null, 5);plus5(10);// 15plus5(25);// 30
我们预先传入参数 5
,并返回一个新函数赋值给 plus5
,此函数可以接受剩余的参数。调用 plus5
传入剩余参数 10
得到最终结果 15
,又传入参数 20
得到结果 30
。偏函数通过设定预设值,帮助哦我们实现代码上的复用。
在 Underscore.js 和 Lodash 均有实现 partial
偏函数,这里稍微实现一下:
var _ = {};function partial(fn) {var args = [].slice.call(arguments, 1);return function() {var position = 0,leng = args.length;for (var i = 0; i < len; i++) {args[i] = args[i] === _ ? arguments[position++] : args[i];}while (position < arguments.length) args.push(arguments[position++]);return fn.apply(this, args);};}
参考资料: