第一版思考 这样操作只能够接收到两个括号内的参数,
function add(){
let args = [...arguments];
let inner = function(){
args.push(...arguments);
let sum =args.reduce((prev,cur)=>prev+cur)
return sum
}
return inner
}
console.log(add(1)(2)) //✔
console.log(add(1)(2)(3)) //x
第二版 调用递归就能够实现多个括号参数的接收
但是这样返回的会是一个函数,不是想要的结果
function add(){
let args = [...arguments];
let inner = function(){
args.push(...arguments);
let sum = args.reduce((prev,cur)=>prev+cur)
return inner
}
return inner
}
第三版 在返回函数中定义一个函数,最后使用的时候进行调用
function add(){
let args=[...arguments]
function inner(){
args.push(...arguments)
let sum=args.reduce((pre,cur)=>pre+cur)
return inner
}
inner.a = function(){
return args.reduce((prev,cur)=>prev+cur)
}
return inner
}
console.log(add(1,5)(2,3,4)(6).a());
第四版 为了使用的时候不调用a 实现自动化,对a重命名为toString 这样实现自动调用
function add(){
let args=[...arguments]
function inner(){
args.push(...arguments)
let sum=args.reduce((pre,cur)=>pre+cur)
return inner
}
inner.toString = function(){
return args.reduce((prev,cur)=>prev+cur)
}
return inner
}
console.log(add(1,5)(2,3,4)(6));