blog
blog copied to clipboard
实现求和函数add
求和函数的用法:
add(1, 2, 3, 4, 5);
add(1)(2)(3)(4)(5);
add(1, 2)(2, 3, 5);
- 用闭包抑制变量
// 实现方法1,用闭包抑制变量,保存参数,当参数达到一定的个数进行求和操作
const add = (function (length) {
let allArgs = [];
function _add (...args) {
allArgs = [...allArgs, ...args];
if (allArgs.length >= length) {
let res = allArgs.reduce((prev, cur) => prev + cur, 0);
allArgs.length = 0
return res;
} else {
return _add;
}
}
return _add
})(5)
- 用偏函数创建一个符合参数个数的求和函数
const curry = func => {
// 判断参数是否达到长度,没有到达长度会进行参数合并然后递归调用
const g = (...allArgs) => allArgs.length >= func.length ? func(...allArgs) : (...args) => g(...allArgs, ...args)
return g
}
// 创建一个两个数求和的函数,根据需要创建符合才是个数的的求和函数
const foo = curry ((a, b) => {
return a + b
})
- 用
bind
进行无限次的参数绑定,最后单独调一个方法执行
function add (...args) {
let _add = add.bind(null, ...args);
_add.result = function () {
return args.reduce((prev, curr) => prev + curr, 0)
}
return _add
}
console.log(add(1, 2)(3).result())