前端面试-手写函数柯里化
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))洒大地