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());