add(1)(2)(3).finish(); // 6
add(1, 2, 3)(4).finish(); // 10
add(1)(2)(3)(4, 5).finish(); // 15
add(2, 6)(1).finish(); // 9
var adding = add(1, 2)(3)
setTimeout(() => {
adding(4)(5, 6).finish(); // 21
}, 1000)
解决方法:
1、闭包
function add(num) {
var sum = 0;
sum = num;
function fn(n) {
sum += n
return fn
}
fn.finish = function () {
console.log(sum);
}
return fn
}
2、原型和bind()
function add(...arr) {
console.log(arr);
add.__proto__.finish = function () {
let res = arr.reduce((a, b) => a += b, 0)
console.log(res);
}
return add.bind(this, ...arr)
}