码迷,mamicode.com
首页 > 其他好文 > 详细

函数柯里化

时间:2020-04-16 13:00:13      阅读:62      评论:0      收藏:0      [点我收藏+]

标签:个数   rri   fun   pre   返回   ret   效果   调用   div   

对于一个函数:

function add(a,b,c){
    return a + b + c
}

我们希望实现一个效果,我们希望有另外一个函数curryingAdd,使得curryingAdd(1,2,3),curryingAdd(1,2)(3),curryingAdd(1)(2,3)和add(1,2,3)的效果是等价的,即实现参数个数的任意化。这便是函数柯里化。

实现代码:

function currying(fn,...args){
    if(fn.length <= args.length){  
    //fn.length返回的是fn函数定义的参数个数,即add函 
    //数的a,b,c三个参数,args.length是curring函数调用时传入的参数个数
        return fn(...args)
    }
    return function(...args1){
        return currying(fn,...args,...args1)
    }
}
function add(a,b,c){
    return a + b + c
}
add(1,2,3) // 6
var curryingAdd = currying(add);
curryingAdd(1)(2)(3) // 6
curryingAdd(1,2)(3) // 6
curryingAdd(1)(2,3) // 6

箭头函数简化写法:

var currying = (fn,...args) => (...args1) => {
        if(fn.length <= args.length){
            return fn(...args)
        }
        return currying(fn,...args,...args1)
}
function add(a,b,c){
    return a + b + c
}
//调用时最后多一个()
currying(add)(1,2)(3)()// 6

 

函数柯里化

标签:个数   rri   fun   pre   返回   ret   效果   调用   div   

原文地址:https://www.cnblogs.com/AwenJS/p/12711866.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!