RXJS基础:函数柯里化 curry

13 篇文章 0 订阅

确定函数收集的时机,如果没有收集完成,则将参数汇总起来。 

//简单封装一个通用柯里化转化函数curry,将普通函数转化为柯里化的函数。
原理:用数组将参数收集起来,达到原函数形参个数就执行原函数,否则返回一个新函数继续接收新参数。
function curry(fn, args) {
    //fn.length:形参个数,num为固定值
    var num = fn.length;
    var args = args || [];
    return function() {
        //arr用于收集传入的参数
        var arr =[].slice.call(argumerits);
        //将之前收集的参数加入arr
        [].push.apply(arr, args);
        //若参数小于num,递归调用继续收集参数
        if (arr.length < num) {
            return curry.call(this, fn, arr);
        }
        //参数达到num,则执行fn
        return fn.apply(this, arr);
    }
}
//此转化后的函数每次可以传入任意个参数
var add_curried = curry(add)
add_curried(1)(2)(3) //6
add_curried(1,2)(3) //6
add_curried(1)(2,3) //6
add_curried(1,2,3) //6

实际项目中使用: 

//普通函数
function add(a, b, c) {
    return a + b + c;
}
add(1,2,3) //6
 
//手动柯里化后的函数,其参数可以逐步单个传入,得到相同结果。
// 例:如果只传入a 就return a,如果传入a b就返回a+b(只收集到a b两个参数)
function _add(a) {
    return function(b) {
        return function(c) {
            return a + b + c;
        }
    }
}
 
_add(1)(2)(3);//6

柯里化作用
1.延时计算,又叫惰性求值。柯里化后的 函数是分步执行的,前几次调用均返回一 个函数,累积传入的参数,最后调用才会 计算,起到延时计算的作用。如bind函 数,改变this指向但并不执行,只返回函

2.固定易变因素。提前将易变因素传参 定下来,生成一个更明确的应用函数。

3.参数复用。当多次调用同一个函数,并 且传递的参数绝大多数是相同的时候。

4.动态创建函数。先完成部分传参, 创建新的函数返回,在需要的时候传入其余的参数调用执行。

2022/12/27 看到一个很有意思写法 :

仅仅需要使用一系列箭头函数

// 一个柯里化函数
let add = (x: number) => (y: number) => x + y;

// 简单使用
add(123)(456);

// 部分应用
let add123 = add(123);

// fully apply the function
add123(456);

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

董厂长

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值