function add(x) {
var sum = x;
var tmp = function (y) {
sum = sum + y;
return tmp;
};
tmp.toString = function () {
return sum;
};
return tmp;
}
console.log(add(1)(2)(3)); //6
console.log(add(1)(2)(3)(4)); //10
function add(){
var sum = 0;
var slice = Array.prototype.slice;
var f = function(){
var params = slice.apply(arguments);
params.forEach(function(it){
sum+=it;
});
f.val = sum;
return f;
}
return f.apply(null,slice.apply(arguments));
}
console.info(add(1)(2)(3)(4)(5)(6,7).val);// 28
function add(){
var sum = 0;
for(let num of arguments)
sum += num;
function b(){
for(let num of arguments)
sum += num;
return b;
};
b.toString = function(){return sum};
return b;
}
console.log(add(1));// { [Function: b] toString: [Function] }
console.log(add(1)+0);// 1
add(1)(2)(3)
你可能需要柯里函数
这个链接有很多方法,我就不一一列举了。
另外再补个链接,关于toString和valueOf的点我
不管是改写toString方法还是valueOf方法(toString会调用valueOf),都无法实现直接读取值,因为直接读取值并不会调用toString方法,所以add(1): { [Function: b] toString: [Function] } ; add(1)+0 : 1。
代码:
非主流版: