[面试题记录01]实现一个function sum达到一下目的

1,395 阅读1分钟
console.log(sum(1, 2, 3, 4, 5).valueOf()) // => 15
console.log(sum(1, 2)(3, 4)(5).valueOf()) // => 15
console.log(sum(1, 2)(3)(4)(5).valueOf()) // => 15
console.log(sum(1)(2)(3)(4)(5).valueOf()) // => 15

/**
 * @author shao
 * @date 2018/03/05
 * @project test
 */
let sum = function () {
    let prevSum = [...arguments].reduce((a, b) => a + b)
    let result = function () {
      return sum(...([...arguments].concat(prevSum)))
    }
    result.valueOf = function () {
      return prevSum
    }
    return result
  }

console.log(sum(1, 2, 3, 4, 5).valueOf()) // => 15
console.log(sum(1, 2)(3, 4)(5).valueOf()) // => 15
console.log(sum(1, 2)(3)(4)(5).valueOf()) // => 15
console.log(sum(1)(2)(3)(4)(5).valueOf()) // => 15