柯里化的作用
提高代码的复用性,减少代码的冗余,能够做到功能内聚,降低耦合,可多次传入参数,待参数传入完毕后再执行函数
// 返回的函数需要固定参数
/*
fn: 函数
*/
function fixParams(fn) {
let args = [].slice.call(arguments, 1)
return function() {
//
let _args = [].slice.call(arguments, 0)
return fn.apply(this, args.concat(_args))
}
}
// 柯里化
function Curry(fn, length) {
let len = length || fn.length
return function() {
let _args = [].slice.call(arguments, 0)
if(_args.length < len) {
let combines = [fn].concat(_args)
return Curry(fixParams.apply(this, combines), len - _args.length)
} else {
return fn.apply(this, _args)
}
}
}