今天在一前端交流群看到又朋友提问,说遇到这个面试题了要怎么实现;之后简单写个demo,沉淀如下:
题目描述
实现sum方法,实现如下能力:
const a = sum(1,2)(3,4)(5);
console.log(a.valueOf()); //15
const b = a(2)(3,1);
console.log(b.valueOf()); // 21
需求分析
- 需求分析,观察 a = sum(1,2)(3,4)(5), 可知sum方法可接受数字参数做加运算,其返回值可以继续调用并传入参数在其基础上累加;
- sum方法得返回值存在valueOf方法获取sum方法累加得和;
- sum方法可接受多参数或者单参数;
实现代码
const sum = (() => {
let record = 0;
const add = (...rest) => {
record = rest.reduce((p,n) => p + n, record);
return add;
};
add.valueOf = () => record;
return add;
})();
const a = sum(1,2)(3,4)(5);
console.log(a.valueOf()); // 15
const b = a(2)(3,1);
console.log(b.valueOf()); // 21