柯里化(Currying)是把接受多个参数的函数变换成接受一个单一参数(最初函数的第一个参数)的函数
经典面试题
add(1)(2)(3) = 6;
add(1, 2, 3)(4) = 10;
add(1)(2)(3)(4)(5) = 15;
es5写法
function currying() {
// 首先先将arguments中的参数指向到一个新的数组中
let args = Array.prototype.slice.call(arguments)
let res = function () {
for (let i of arguments) { args.push(i) }
return res
}
res.toString = function () {
return args.reduce((a, b) => a + b, 0)
}
return res
}
es6写法
function currying(...args) {
let res = function (...arg) {
args.push(...arg)
return res
}
res.toString = function () {
return args.reduce((a, b) => a + b)
}
return res
}