什么是柯里化
严格来说一个函数只要一个参数,将具有多个参数的函数转换为单参数函数链的体式格局,这就是currying。厥后演变成支撑不定参数的函数链的情势流行起来。
// 在JS中能够罕见如许挪用体式格局
add(1)(2)(3) // 6
add() // 输出效果
> 6
// 或许
add(1)(2)(3)() === 6
// 或许
add(1)
add(2)
add(3)
add() === 6
柯里化的作用
- 闭包
- 耽误实行
- 参数复用
JS中完成柯里化
这是个柯里化的装潢器
function Currying(fn) {
let args = [].slice.call(arguments,1);
function g() {
if(arguments.length > 0){
args.push.apply(args, arguments)
return g
} else {
return fn.apply(fn, args)
}
}
return g
}
做个测试
// 定义一个乞降函数
function add() {
let count = 0
if(arguments.length > 0) {
for(let i = 0; i < arguments.length; i++){
count += arguments[i]
}
}
return count
}
// 测试
const _add = Currying(add)
_add(1)
_add(2)
_add(3)()
// > 6