add(1)(2)(3)自身连续调用的实现方

今天面试的时候遇到了这样的一个题目实现add(1)(2)(3)返回6的add函数。

第一个想法就是利用闭包返回函数达到目的代码如下

function add(){
  var arg1 = arguments[0];
  return function(){
    var arg2 = arguments[0];
    return function(){
      var arg3 = arguments[0];
      return arg1*arg2*arg3;
    }
  }
}

这个解决方法可以解决这个问题但是当函数调用次数发生变化的时候这个解决方法久嗝屁了!记得原来看过一个文章说的是利用函数的toString()valueOf的重写达到连续调用的例子但是由于时间太久了面试的时候回忆不出来!

回到家后百度了一下代码是这样子的

function add(){
  var sum = arguments[0];
  function temp(){
    sum = sum + arguments[0];
    return temp;
  }
  temp.toString = function(){
    return sum;
  }
  return temp;
}

你可能感兴趣的:(add(1)(2)(3)自身连续调用的实现方)