美文网首页
柯里化记录

柯里化记录

作者: 章文顺 | 来源:发表于2019-02-01 15:32 被阅读0次
    function add() {
        // 第一次执行时,定义一个数组专门用来存储所有的参数
        var _args = [].slice.call(arguments);
    
        // 在内部声明一个函数,利用闭包的特性保存_args并收集所有的参数值
        var adder = function () {
            var _adder = function() {
                // [].push.apply(_args, [].slice.call(arguments));
                _args.push(...arguments);
                return _adder;
            };
    
            // 利用隐式转换的特性,当最后执行时隐式转换,并计算最终的值返回
            // _adder.valueOf
            _adder.toString = function () {
                return _args.reduce(function (a, b) {
                    return a + b;
                });
            }
    
            return _adder;
        }
        // return adder.apply(null, _args);
        return adder(..._args); // 重点:第一次调用adder,后续递归调用自己
    }
    
    var a = add(1)(2)(3)(4);   // f 10
    var b = add(1, 2, 3, 4);   // f 10
    var c = add(1, 2)(3, 4);   // f 10
    var d = add(1, 2, 3)(4);   // f 10
    
    console.log(a.toString())
    
    

    大前端知识库收集分享 www.rjxgc.com 壹玖零Tech
    搜罗各种前后端奇淫技巧,花式编程思想,日日更新,速来围观吧...

    摘引:https://www.jianshu.com/p/5e1899fe7d6b

    相关文章

      网友评论

          本文标题:柯里化记录

          本文链接:https://www.haomeiwen.com/subject/ezrdsqtx.html