这个概念好像不太好翻译,有人直译为偏应用,对不懂这个概念的人有点一头雾水,不知所云,我来简单理解一下。另外已经有工程师把这个特性提交到了 tc39,说不定不久我们就能在新版谷歌浏览器使用了。
我们有一个求和函数如下:
function foo(a, b, c) { return a + b + c }
当我调用的时候,有个参数我突然不知道传什么,暂时想不传,并用 undefined
来替代。我们当然不能这么写:
foo(undefined,1,2)
所以,需要引入一个工具方法:
function partial(fn,...partialArgs){
let args = partialArgs.slice(0);
return function(...fullArguments) {
let arg = 0;
let args2 = args.slice(0)
for (let i = 0; i < args.length && arg < fullArguments.length; i++) {
if (args2[i] === undefined) {
args2[i] = fullArguments[arg++];
}
}
return fn.apply(this, args2);
};
};
然后我们就能这么写了:
let partialedFoo = partial(foo,undefined,1,4)
partialedFoo(5) // 10
// 或者
let partialedFoo = partial(foo,undefined,1,undefined)
partialedFoo(5,5) // 11
这就是 partial application。
《partial application》有一个想法