函数柯里化
ziwei3749 opened this issue · comments
函数柯里化
函数柯里化的慨念和作用:
慨念: 只传递给函数的一部分参数来调用它,让它返回一个新的函数去处理剩下的参数
可以用于惰性求值
curry函数的实现
- curry是一个高阶函数,接受一个fn作为参数,return新的fn
- curry的实现需要递归,不断调用curry
- 递归的终止条件时,fn.length === argument.length (当然实参需要自己去维护)
function curry( fn, someParams ) {
someParams = Array.isArray( someParams ) ? someParams : []
return function () {
let newParams = Array.from( arguments )
let allParams = [ ...someParams, ...newParams ]
if ( fn.length === allParams.length ) { // 跳出递归条件:形参的长度和累计实参的长度相同
return fn.apply( null, allParams )
} else {
return curry( fn, allParams )
}
}
}
注意实现curry的时候,我并没有使用箭头函数,因为箭头函数里没有arguments