前端面试-手写函数柯里化

date
Nov 15, 2022
slug
write-function-currying
status
Published
tags
Interview
summary
write function currying
type
Post

函数科柯里化实现

常见面试题,实现一个科里化函数,可以将一个普通函数科里化。
 
function add(num1, num2, num3) {
    return num1 + num2 + num3
}

// 编写一个函数,可以将其他函数科里化
function myCurry(fn) {
    function curried(...args){
        // 判断当前接受的参数与原函数参数数量是否一致,这里通过 fn.length 可以获取函数参数长度
        if(args.length >= fn.length){
            // 当获取的参数数量大于函数参数数量时,则执行函数。
            return fn.apply(this, args)
        }else {
            // 当个数没有达到时,需要返回一个新的函数,继续接收参数
            function curriedAgain(...args2){
                // 接收到参数之后,递归调用curried函数继续检查参数是否达到一致
                return curried.apply(this, [...args,...args2])
            }
            return curriedAgain
        }
    }
    return curried;
}

var curriedAdd = myCurry(add)
console.log(curriedAdd(10)(20)(30))
console.log(curriedAdd(10, 20)(30))
console.log(curriedAdd(10, 20, 30))
 
洒大地

© xk_wan 2021 - 2024