function sum(x) {
let num = x;
let tmp = function(y) {
num = num + y;
return tmp;
}
tmp.toString = function() {
return num;
};
return tmp;
}
console.log(sum(1)(2)(3)(4)); // 10
// others
const sum = a => b => b ? sum( a + b ) : a;
console.log(sum(1)(2)(3)(4)());
首先要一个数记住每次的计算值,所以使用了闭包,在 tmp 中记住了 x 的值,第一次调用 sum() ,初始化了 tmp,并将 x 保存在 tmp 的作用链中,然后返回 tmp 保证了第二次调用的是 tmp 函数,后面的计算都是在调用 tmp, 因为 tmp 也是返回的自己,保证了第二次之后的调用也是调用 tmp,而在 tmp 中将传入的参数与保存在作用链中 x 相加并付给 num,这样就保证了计算;
但是在计算完成后还是返回了 tmp 这个函数,这样就获取不到计算的结果了,我们需要的结果是一个计算的数字那么怎么办呢,首先要知道 JavaScript 中,打印和相加计算,会分别调用 toString 或 valueOf 函数,所以我们重写 tmp 的 toString 和 valueOf 方法,返回 num 的值;
实现 sum(1)(2)(3)(...n)
暂无评论