【每日面试题】实现 add(1)(2)(3)

198 阅读1分钟
// 实现 add(1)
function add(a) {
    return a;
}

// 实现 add(1)(2)
function add(a) {
    return function (b) {
        a = a + b;
        return a;
    }
}

// 实现 add(1)(2)(3)
function add(a) {
    return function (b) {
        a = a + b;
        return function () {
            a = a + c; 
            return a;
        }
    }
}

// 实现 add(1)(2)(3)...(10)
function add (a) {
    var fn = function (b) {
        a = a + b
        
        return fn;
    }
    
  fn.toString = function () { return a };
  
  return fn;
}

// // 实现 add(1, 2)(2)(3)...(10) 思路:使用 reduce 计算拼接的参数
function add() {
    var args = [].slice.call(arguments);
  
    var fn = function () {
        var args_fn = [].slice.call(arguments);
    
        return fn.apply(null, args.concat(args_fn));
    }
  
    fn.toString = function () {
        return args.reduce((a, b) => a + b);
    }
  
    return fn;
}