柯里化函数Currying是把接受多个参数的函数变换成接受一个单一参数(最初函数的第一个参数)的函数,并且返回接受余下的参数而且返回结果的新函数的技术(属于闭包一个分支吧)
// 普通函数
function fn(a, b) {
return a + b
}
// 柯里化
function currying(a) {
return function (b) {
return a + b
}
}
fn(1, 1) // 2
currying(1)(2) // 3
// 下面写一个例子更好理解柯里化 获取最大的值
//
function curryingMax() {
let _args = Array.prototype.slice.call(arguments)
// 作为一个函数返回 这时候就可以()()() 调用了
let _adder = function() {
_args.push(...arguments)
return _adder
}
// 作为闭包的出口,或者理解为 递归的出口函数
_adder.getMax = function() {
return Math.max(..._args)
}
return _adder
}
console.log(curryingMax(1)(2)(10)(40).getMax()) // 40