13. 偏函数
偏函数就是将一个 参数的函数转换成固定 参的函数,剩余 个参数将在下次调用全部传入。
样例如下:
js
function add(a, b, c) {
return a + b + c;
}
const partialAdd = partial(add, 1)
console.log(partialAdd(2, 3))
partial()
函数实现如下:
js
const partial = (fn, ...args) => (...arg) => fn(...args, ...arg)
/**
* @param {number} a
* @param {number} b
* @param {number} c
*/
function add(a, b, c) {
return a + b + c
}
const partialAdd = partial(add, 1)
console.log(partialAdd(2, 3))
有时候我们想要一个占位符功能,使用 placeholder
占据一个位置,然后在下一次传递即可:
用起来就像这样:
js
function add(a, b, c) {
return a + b + c;
}
const partialAdd2 = partial(add, 1, placeholder, 3)
console.log(partialAdd(2))
代码实现:
js
const placeholder = Symbol('placeholder')
function partial(fn, ...args) {
return (...arg) => {
let curr = 0
return fn(...args.map(val => (val === placeholder) ? arg[curr++] : val), ...arg.slice(curr))
}
}
function add(a, b, c) {
return a + b + c
}
const partialAdd = partial(add, 1)
const partialAdd2 = partial(add, 1, placeholder, 3)
console.log(partialAdd(2, 3))
console.log(partialAdd2(2))