偏函数定义
wiki
在计算机科学中,局部应用是指固定一个函数的一些参数,然后产生另一个更小元的函数。 什么是元?元是指函数参数的个数,比如一个带有两个参数的函数被称为二元函数。
例子
function add(a, b) {
return a + b;
}
// 执行 add 函数,需要传入两参数。
add(1, 2); // 3
// 假设有一个 partial 函数可以做到局部应用
const addOne = partial(add, 1);
addOne(2); // 3
柯里化与局部应用的区别
- 柯里化是将一个多参数函数转换成多个单参数函数,也就是将一个 n 元函数转换成 n 个一元函数。
- 局部应用则是固定一个函数的一个或者多个参数,也就是将一个 n 元函数转换成一个 n - x 元函数。
实现 partial 函数
第一版
function partial(fn) {
const args = [].slice.call(arguments, 1);
return function () {
const newArgs = args.concat([].slice.call(arguments));
return fn.apply(this, newArgs);
};
};
第二版(支持占位符)
const _ = {};
function partial(fn) {
const args = [].slice.call(arguments, 1);
return function () {
let position = 0, len = args.length;
for (let 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);
};
};
参考: