繁体   English   中英

JavaScript 中的函数组合

[英]Function composition in JavaScript

在下划线、lo-dash 等库中实现函数组合的好处是什么,类似于这个:

var compose = function() {
    var funcs = arguments;

    return function() {
        var args = arguments;
        for (var i = funcs.length; i --> 0;) {
            args = [funcs[i].apply(this, args)];
        }
        return args[0];
    }
};

var c = compose(trim, capitalize);

与此相比:

var c = function (x) { return capitalize(trim(x)); };

后者的性能要好得多。

一方面,它更容易阅读。 性能很少比这更重要。 此外,您可以制作具有几乎相同性能的专用 arity 2 函数。

另一个好处是可以在运行时轻松更改组合。 您可以创建在大写前修剪、在修剪前大写、仅修剪、仅大写或两者都不使用的版本,而无需在代码中明确指定每个组合。 这有时可以大大简化您的代码。 运行时组合是您从来不知道自己一直想要的东西之一。

例如:

var c = function(x) {return x;} // identity
var onTrimClick          = function() {c = compose(c, trim);}
var onCapitalizeClick    = function() {c = compose(c, capitalize);}
var onSomethingElseClick = function() {c = compose(c, somethingElse);}

这使您可以在运行时根据用户单击的内容和顺序创建组合函数c

 //A simple way to understand javascript function composition => function composition(...fun) { return function (value) { var functionList = fun.slice(); while (functionList.length > 0) { value = functionList.pop()(value); } return value; } } function mult2(value) { return value * 2; } function mult3(value) { return value * 3; } function mult5(value) { return value * 5; } var composedFun = composition(mult2, mult3, mult5); console.log(composedFun); console.log(composedFun(1)); console.log(composedFun(2));

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM