JS柯里化

2019-04-23  本文已影响0人  vinterx

柯里化简介

js柯里化(currying)又译为卡瑞化或加里化,是把接受多个参数的函数,变为可接受多次调用的函数,并把每次调用的参数保存最后一次性返回结果,其实主要是运用了闭包和函数递归调用。

示例

    function fn(){
        //  运用闭包存参数
        let _arg = Array.from(arguments)
        return function ffn() {
            //  最后返回
            if(!arguments.length) {
                //  求和
                return _arg.reduce((sum, item) => sum + item)
            } else {
                //  合并参数
                _arg = [].concat.call(_arg, Array.from(arguments))
                //  递归
                // return arguments.callee  //  ES5严格模式弃用
                return ffn
            }
        }
    }

    console.log(fn(1, 2)(2)(3, 5)(4)(5)())  //  22

拓展

    function fn(){
        //  存参数
        let _arg = [...arguments]
                //  千万别使用箭头函数,否则arguments指向包裹函数的arguments
        let ffn = function() {
            //  合并参数
            _arg = [].concat.call(_arg, [...arguments])
            // _args.push(...arguments);
            //  递归
            return ffn
        }

        ffn.toString = function() {
            return _arg.reduce((sum, item) => sum + item)
        }
        return ffn
    }

    console.log(fn(1, 2)(2)(3, 5)(4)(5))    //  22
上一篇 下一篇

猜你喜欢

热点阅读