以下为ChatGPT自动生成的解答,正确与否请自行判断。
BFE.devAI解答 - JavaScript 代码题
23. 实现一个sum()方法
实现如下:
function sum(num) {
let result = num; // 初始值为第一次调用传入的参数
const fn = function(num2) {
result += num2; // 将每次调用的参数加到result中
return fn;
}
fn.valueOf = function() { // 重写valueOf方法,返回sum的结果
return result;
};
return fn;
}
以上实现中,使用了函数柯里化的思想,每次调用返回一个新的函数,将结果累加到闭包变量result
中,并重写valueOf
方法,最后返回这个新函数。当我们对这个函数进行计算或打印时,会自动调用重写的valueOf
方法,返回累加的结果。
其他的一些解答思路:
使用闭包:
function sum(a) {
function inner(b) {
return sum(a + b);
}
inner.valueOf = inner.toString = () => a;
return inner;
}
使用 ES6 箭头函数:
const sum = a => {
const _sum = b => sum(a + b);
_sum.valueOf = () => a;
return _sum;
};
使用代理对象:
function Builder(fn, args) {
const self = this;
this.fn = fn;
this.args = args || [];
return new Proxy(fn, {
get(target, name) {
if (name !== "valueOf") {
return self;
}
return () => self.args.reduce((a, b) => a + b, 0);
},
apply(target, thisArg, args) {
return new Builder(target, self.args.concat(args));
}
});
}
const sum = num => new Builder(null, [num]);