blog icon indicating copy to clipboard operation
blog copied to clipboard

实现求和函数add

Open wuxianqiang opened this issue 4 years ago • 0 comments

求和函数的用法:

add(1, 2, 3, 4, 5);
add(1)(2)(3)(4)(5);
add(1, 2)(2, 3, 5);
  1. 用闭包抑制变量
// 实现方法1,用闭包抑制变量,保存参数,当参数达到一定的个数进行求和操作
const add = (function (length) {
  let allArgs = [];
  function _add (...args) {
    allArgs = [...allArgs, ...args];
    if (allArgs.length >= length) {
      let res = allArgs.reduce((prev, cur) => prev + cur, 0);
      allArgs.length = 0
      return res;
    } else {
      return _add;
    }
  }
  return _add
})(5)
  1. 用偏函数创建一个符合参数个数的求和函数
const curry = func => {
  // 判断参数是否达到长度,没有到达长度会进行参数合并然后递归调用
  const g = (...allArgs) => allArgs.length >= func.length ? func(...allArgs) : (...args) => g(...allArgs, ...args)
  return g
}
// 创建一个两个数求和的函数,根据需要创建符合才是个数的的求和函数
const foo = curry ((a, b) => {
  return a + b
})
  1. bind 进行无限次的参数绑定,最后单独调一个方法执行
function add (...args) {
  let _add = add.bind(null, ...args);
  _add.result = function () {
    return args.reduce((prev, curr) => prev + curr, 0)
  }
  return _add
}

console.log(add(1, 2)(3).result())

wuxianqiang avatar Mar 16 '20 07:03 wuxianqiang