Curry

Curry

作者:LAMP小白  点击:2032  发布日期:2013-01-03 21:46:00  返回列表

函数应用


在一些纯粹的函数式编程语言中,函数并不描述为被调用(即called或invoked),而是描述为应用(applied),在JS中我们也可以做同样的事,使


用function.prototype.apply()来应用函数


方法对象.apply(对象,参数数组对象)

方法对象.call(对象,参数)


mio_lt;scriptmio_gt;
    var a = {};
    a.haha = function (name) {
        console.log('haha'+name);
    }
    a.haha.apply(a, ["aaaaaa"]);
    a.haha.call(a, 'sssss');
mio_lt;/scriptmio_gt;



部分应用(partial application)和Curry化


一次只传递部分参数至一个函数中,得到类似语法糖(syntactic sugar)的执行方法


mio_lt;scriptmio_gt;
    var add = function (x, y) {
        if (typeof y === "undefined") {
            return function(y) {
                return x + y;
            }
        }
        return x + y;
    };
    console.log(add(10)(20));
    var xis10 = add(10);
    console.log(xis10(200));
mio_lt;/scriptmio_gt;



何时使用Curry化?


当发现正在调用同一个函数,并且传递的参数绝大多数都是相同的,那么该函数可能是用于Curry化的一个很好的候选参数,可以用过将一个函数集合部分应用(partially apply)到函数中,从而动态创建一个新函数,这个新函数将会保存重复的参数,并且还会使用预填充原始函数所期望的完整参数列表




上一篇:配置对象 下一篇:快递查询API
0