ziwei3749 / blog

已停止更新..转移至 https://segmentfault.com/u/ziwei3749

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

函数柯里化

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