Open sisterAn opened 4 years ago
先来抛砖,希望可以引玉
function add() {
const args = Array.prototype.slice.apply(arguments);
const self = this;
this.nums = [...args];
function _add() {
const _args = Array.prototype.slice.apply(arguments);
this.nums.push(..._args);
return _add;
}
_add.value = function() {
return self.nums.reduce((acc, cur) => acc += cur, 0);
}
return _add;
}
考验的是闭包和this
function add(...args) {
const nums = [...args];
function addFn(...args1) {
nums.push(...args1);
return addFn;
}
addFn.value = () => {
const sum = nums.reduce((s, n) => s + n, 0);
console.log(sum);
return sum;
};
return addFn;
}
思路都差不多
const add = (...args) => {
const _add = (...args1) => {
return add(...args, ...args1)
}
_add.value = () => args.reduce((t, e) => t+e)
return _add
}
add(1)(2,3)(4).value()
function add(...params) {
const result = add.bind(null, ...params);
result.value = () => params.reduce((accumulator, cur) => accumulator + cur);
return result;
}
function add(...args) {
const _add = (..._args) => {
args.push(..._args);
return _add;
};
_add.value = () => args.reduce((a, b) => a + b, 0);
return _add;
}
const res = add(1)(2, 3)(4).value(); //10
console.log(res);
function add(...params) { let args = [...params]; function innerAdd(...p) { args = args.concat(p); return innerAdd; } function value() { return args.reduce((s, n) => s + n , 0) } innerAdd.value = value;
return innerAdd; }
/**
* 函数柯里化实现add(1)(1,2)(3)等
* https://blog.csdn.net/weixin_30498807/article/details/102319249
*/
// let obj = {
// name:'hell',
// toString:function() {
// console.log('调用了toString')
// return '22'
// },
// valueOf:function() {
// console.log('调用了obj.valueOf');
// return '00'
// }
// }
// console.log(obj+"3")
function test() {
console.log(1);
}
test.toString = function () {
console.log('调用了valueOf方法');
return 2;
}
function add() {
var arr = Array.prototype.slice.call(arguments)
const _adder = function () {
arr.push(...arguments)
return _adder;
}
_adder.valueOf = function () {
return arr.reduce((a, b) => a + b);
}
return _adder;
}
let res = add(1)(2)(3, 4);
console.log(add(1)(2, 3).valueOf())
console.log(res+0)
function add(...args1) { let _add = function (...args2) { return add(...args1, ...args2); };
_add.value = function () { let sum = 0; for (let num of args1) { sum += num; } return sum; };
return _add; }
例如: