# 题目描述

实现一个 add 函数 满足 add(1,2,3)add(1)(2)(3)结果相同

# 思路

这是函数柯里化的一种基本表现形式

# 代码实现

function myAdd() {
  let args = [...arguments];
  let fn = function () {
    // 合并参数
    let innerArgs = [...arguments];
    // let context = [...arguments][0];
    return myAdd.apply(undefined, args.concat(innerArgs));
  };

  fn.toString = () => {
    return args.reduce((pre, cur) => pre + cur);
  };
  return fn;
}

console.log(myAdd(1)(2)(3).toString());
console.log(myAdd(1, 2, 3).toString());

/* 
  6
  6 
*/
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22