高阶函数实现

请实现一个 add 函数,满足以下功能。

add(1);     // 1
add(1)(2);      // 3
add(1)(2)(3);  // 6
add(1)(2, 3);   // 6
add(1, 2)(3);   // 6
add(1, 2, 3);   // 6

思路:
1.函数内部返回新的函数
2.函数内部记录每次传入的参数
3.函数结果通过调用默认toString方法输出

代码如下:

function add() {
  let args = [].slice.call(arguments);
  let fn = function(){
   let fn_args = [].slice.call(arguments)
   return add.apply(null,args.concat(fn_args))
 }
 fn.toString = function(){
   return args.reduce((a,b)=>a+b)
 }
 return fn
}

你可能感兴趣的:(高阶函数实现)