const add = arg1 => {
let args = [arg1]
const fn = args2 => {
args.push(args2)
return fn
}
fn.toString = function() {
return args.reduce((prev, item) => prev + item, 0)
}
return fn
}
const n = add(1)(2)(3)
alert(n)
console.log(n)
// add(1,2)(3)
const add = (...arg1) => {
let args = [...arg1]
const fn = (...arg2) => {
args = [...args, ...arg2]
return fn
}
fn.toString = function() {
return args.reduce((prev,item) => prev + item, 0)
}
return fn
}
const n =(add(4)(7)(8)(2))
alert(n)
// 支持IE9的方法的通用curry
const curry = (fn, length) => {
length = length || fn.length
return function (...args) {
if(args.length < length) {
return curry(fn.bind(this, ...args), length - args.length)
} else {
return fn.call(this, ...args)
}
}
}
const add = (...args) => {
// console.log(args)
const args1 = [...args]
// console.log(args1)
return args1.reduce((prev, item) => prev + item,0)
}
// console.log(add(2,3))
// console.log(curry(add(3)(9)))
以上的都是参考书籍实现的,add(2)(3)实现的最核心的问题就是需要一个类似a + b + …+c这样一个函数,然后根据arguments去遍历获取让参数去相加