学习笔记 --- 奇怪的函数柯里化

163 阅读1分钟

函数柯里化

1.协议复用

    const url_https = url_curring('https://'),
               url1 = url_https('cn.bing.com', '/search?q=掘金'),
               url2 = url_https('cn.bing.com', '/search?q=思否'),
               url3 = url_https('cn.bing.com', '/search?q=知乎'),
               url4 = url_https('cn.bing.com', '/search?q=简书'),
               url5 = url_https('cn.bing.com', '/search?q=博客园');

2.兼容性处理

    const whichEvent = (function (win) {
        if (win.addEventListener) {
            return function (element, type, handler, useCapture) {
                element.addEventListener(type, function (e) {
                    handler.call(element, e);
                }, useCapture);
            }
        } else {
            return function (element, type, handler) {
                element.attachEvent('on' + type, function (e) {
                    handler.call(element, e);
                })
            }
        }
    })(window);

3.无限累加

    function sum() {
        var toArray = Array.prototype.slice,
            args = toArray.call(arguments);

        var _add = function () {
            var arg2 = toArray.call(arguments);
            args = args.concat(arg2);
            return _add;
        }

        _add.toString = function () {
            return args.reduce((prev, cur) => {
                return prev + cur;
            }, 0);
        }

        return _add;
    }
    console.log(sum(1, 2)(3)(4, 5, 6) == 21); // 21

4.属性遍历

    const nameList = [            { hero: '关羽', profession: '发育路' },            { hero: '张飞', profession: '辅助' },            { hero: '黄忠', profession: '中单' },            { hero: '马超', profession: '对抗' },            { hero: '赵云', profession: '打野' }        ]

        const curring = name => ele => ele[name],
            name_hero = curring('hero'),
            name_profession = curring('profession');

        console.log(nameList.map(name_hero)); // ['关羽', '张飞', '黄忠', '马超', '赵云']
        console.log(nameList.map(name_profession)); // ['发育路', '辅助', '中单', '对抗', '打野']

总结

巧用柯里化,代码更易维护