JS函数如何通过多个()连续多次调用

问题描述:

今天Web前端笔试遇到一个问题,一个函数func()可以这样调用func(1)(2)(5)......,并且最终能返回各个括号中数值的乘积,谁能解答?

改进一下

 function func(a){
  if(typeof(a)=='undefined'){
     return this.result;
  }else{
    this.result = (typeof(this.result)=='undefined'?a:this.result*a);
    return func;
  }
}
var r = func(1)(2)(5)();

 var result=1;
function func(a){
  result = result*a;
  return func;
}

函数返回的结果如果是一个函数,那么就可以对它再用括号调用。
甚至你可以用它实现递归函数的展开。
参考:http://en.wikipedia.org/wiki/Fixed-point_combinator

 var multiply = (function () {
            var product = 1;

            return function(num) {
                if(arguments.length == 0){
                    var result = product;
                    product = 1;
                    return result;
                }

                product *= num;
                return arguments.callee;
            }
        })();

        // 测试代码

        var product1 = multiply(2)(4)();
        console.log(product1);

        var product2 = multiply(4)(7)();
        console.log(product2);

        multiply(12);
        multiply(5);
        console.log(multiply());