跳至主要內容

13. 偏函数

鸭梨小于 1 分钟

13. 偏函数

偏函数就是将一个 nn 参数的函数转换成固定 xx 参的函数,剩余 nxn - x 个参数将在下次调用全部传入。

样例如下:

function add(a, b, c) {
  return a + b + c;
}

const partialAdd = partial(add, 1)
console.log(partialAdd(2, 3))

partial() 函数实现如下:

const partial = (fn, ...args) => (...arg) => fn(...args, ...arg)

有时候我们想要一个占位符功能,使用 placeholder 占据一个位置,然后在下一次传递即可:

用起来就像这样:

function add(a, b, c) {
  return a + b + c;
}

const partialAdd2 = partial(add, 1, placeholder, 3)
console.log(partialAdd(2))

代码实现:

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))