柯里化函数

柯里化函数

  • 柯里化函数编程思想
  • 如何实现柯里化函数
  • 以及所要使用的知识点(必包的保护和保存),以及执行的顺序,bind方法的体会
    废话不多说上代码
<!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>Document</title>
    <style>
        html,
        body {
            width: 100%;
            height: 100vh;
            margin: 0;
            padding: 0;
            background-color: orange;
        }
    </style>
</head>

<body>
    <script type="text/javascript">


        ~function () {

            // Function.prototype.mybind = function (context = window, ...outargs) {

            //     let _this = this

            //     return function (...innerargs) {

            //         _this.call(context, ...outargs.concat(innerargs))
            //     }

            // }

            Function.prototype.mybind = function (context = window, ...outargs) {
                return (...innerargs) => {
                    this.call(context, ...outargs.concat(innerargs))
                }
            }
        }()
        let obj = {
            name: "肖扬"
        }
        function fn(...args) {
            console.log(this, args, "[][]")
        }
        // document.body.onclick = fn.bind(obj, 10, 20)
        document.body.onclick = fn.mybind(obj, 10, 20)
        // document.body.onclick = fn
        // document.body.onclick = function (ev) {
        //     // console.log(ev)
        //     fn.call(obj, 10, 20, ev)
        // }

        function add(n1, n2, n3, n4) {
            return n1 + n2 + n3 + n4
        }

        function currying(fn, length) {

            length = length || fn.length;
            return function (...args) {
                if (args.length >= length) {
                    fn(...args)
                }
                return currying(fn.bind(null, ...args), length - args.length)
            }


        }

        let adds = currying(add, 4)

        adds(1)(2)(3)(4)



        add.bind(null, 1).bind(null, 2).bind(null, 3)(4)

        /* 达到条件内参合并 */

        function anonymous1(...innerargs) {
            $add.call(null, [1, ...innerargs])
        }
        function anonymous2(...innerargs) {
            anonymous1.call(null, [2, ...innerargs])
        }
        function anonymous3(...innerargs) {
            anonymous2.call(null, [3, ...innerargs])
        }
        anonymous3(4)

        anonymous2.call(null, 3, 4)
        anonymous1.call(null, 2, 3, 4)
        $add.call(null, 1, 2, 3, 4)

        console.log(add(1,2)(3,4))

    </script>
</body>

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值