js 柯里化

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>柯里化</title>
</head>

<body>
    <script>
        /**  柯里化: 把一个多参数函数转化为一个嵌套的一元函数的过程  多元参数单元化**/
        function add(x, y, z) {
            return x + y + z;
        }

        // add(1, 2, 3);
        // add(1)(2)(3);


        // 柯里化
        const curry1 = function (fn) {
            return function (x) {
                return function (y) {
                    return function (z) {
                        return fn(x, y, z);
                    }
                }
            }
        }

        // 通用柯里化
        const curry2 = function (fn) {
            return function curryFn(...args) {
                if (args.length < fn.length) {
                    return function () {
                        return curryFn(...args, ...arguments);
                    }
                } else {
                    return fn(...args);
                }
            }
        }

        let myAdd = curry2(add);

        console.log(myAdd(1)(2)(3));

        // 意义:1、参数复用

        const str1 = 'aaa';
        const str2 = 'bbb';

        function addPre(pre, str) {
            return pre + '-' + str;
        }

        let pre = 'AA';

        // console.log(addPre(pre, str1));
        // console.log(addPre(pre, str2));

        let myAddPre = curry2(addPre)(pre);
        console.log(myAddPre(str1));
        console.log(myAddPre(str2));

        // 意义: 2、延迟执行
        
    </script>
</body>

</html>

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值