参考文章: https://segmentfault.com/a/1190000008610969
add(1, 2, 3, ...)是对传入参数的求和方法
function add (...args) {
return args.reduce((prev, val) => {
return prev + val
})
}
let rs = add(1, 2, 3, 4, 5, 6)
console.log(rs) // 21
add(1)(2)(3)是一个无限累加的函数add方法,都是将函数作为返回值输出,然后接收新的参数并进行计算。
我们知道打印函数时会自动调用 toString()方法,函数 add(a) 返回一个闭包 sum(b),
函数 sum() 中累加计算 a = a + b,只需要重写sum.toString()方法返回变量 a 就可以了
function add (a) {
function sum(b) { // 使用闭包
a = a + b; // 累加
return sum;
}
sum.toString = function() { // 重写toSting() 方法
return a;
}
return sum; // 返回一个函数
}
console.log(add(1)(3)) // 4
console.log(add(1)(3)(5)) // 9