函数柯里化

2021-04-25  本文已影响0人  行走的蛋白质
一. 什么是函数柯里化
// ex:
function add(a, b) {
    return a + b;
}
add(1, 2) // 3
// 柯里化
const addCurry = curry(add);
addCurry(1)(2) // 3
二. 函数柯里化的实现
function curry(fn) {
  return _curry.call(this, fn, fn.length);
}
function _curry(fn, len, ...args) {
  return function(...params) {
    const _args = args.concat(params);
    if (_args.length >= len) {
      return fn.apply(this, _args);
    } else {
      return _curry.call(this, fn, len, ..._args);
    }
  }
}
// test
function add (a, b, c, d) {
  return a + b + c + d;
}
const addCurry = curry(add);
console.log(addCurry(1)(2)(3)(4)) // 10
console.log(addCurry(1, 2, 3)(4)) // 10
三. 函数柯里化的作用
四. 经典面试题
// 实现一个add方法,使计算结果能够满足如下预期:
console.log(add(1)(2)(3)) // 6;
console.log(add(1, 2, 3)(4)) // 10;
console.log(add(1)(2)(3)(4)(5)) // 15;

function add() {
  let args = [...arguments];
  function _add() {
    args = args.concat([...arguments]);
    return _add;
  }
  _add.toString = function() {
    return args.reduce((pre, cur) => {
      return pre + cur;
    })
  }
  return _add;
}
上一篇下一篇

猜你喜欢

热点阅读