面试题,实现一个求和函数

497 阅读1分钟

具体要求如下:


    // 第一种,思路,这样一个函数就可以了
    function sum(...arr) {
      let num = arr.reduce((pre, cur) => {
        return pre + cur;
      }, 0);
      function suum(...arg) {
        const y = arg.reduce((pre, cur) => {
          return pre + cur;
        }, 0)
        num += y;
        return suum;
      }
      suum.valueOf = () => {
        return num;
      }
      return suum;
    }
    // sum(1,2)(3,4)(9)
    // 第二种,代码最少解,但是多了一个全局变量
    let num = 0;
    function sum(...arr) {
      num += arr.reduce((pre, cur) => {
        return pre + cur;
      }, 0);
      sum.valueOf = () => {
        return num;
      }
      return sum;
    }

目前只能想到这两个解法,一直想要一个解法,类似第二种递归方式,但是不要开头的全局变量let num,抛砖引玉,请大神指点