♫【模式】Curry化

/**

 * 当发现正在调用同一个函数,并且传递的参数绝大多数都是相同的,

 * 那么该函数可能是用于Curry化的一个很好的候选参数

 */

;(function() {

    function add(x, y) {

        if (typeof y === 'undefined') {

            return function(y) {

                return x + y

            }

        }

        return x + y

    }

    console.log(add(1)(3))

}())

;(function() {

    function schonfinkelize(fn) {

        var slice = Array.prototype.slice

        var stored_args = slice.call(arguments, 1)

        return function() {

            var new_args = slice.call(arguments)

            var args = stored_args.concat(new_args)

            return fn.apply(null, args)

        }

    }

    function add(x, y) {

        return x + y

    }

    console.log(schonfinkelize(add, 4)(5))

})()

 

你可能感兴趣的:(模式)