要求:实现一个add函数使得add(1,2,3)、add(1,2)(2)、add(1)(2)(3)结果都为6
分析:返回的结果是数值,但是还能连续调用?连续调用过程中sum是保存的,所以可以使用闭包
实现:使用闭包保存每次调用的结果的sum,返回一个函数,通过改写toString方法使得它打印出来是sum;
实现大致如下
function add(...argu){
let sum=0;
sum=argu.reduce((x,y)=>x+y)
function fn(...arg){
sum=arg.reduce((x,y)=>x+y,sum)
return fn //这里是为了能够连续调用
}
fn.toString=function (){
return sum
}
return fn
}
经检测可用