Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/extjs/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JavaScript中的函数组合_Javascript_Functional Programming - Fatal编程技术网

JavaScript中的函数组合

JavaScript中的函数组合,javascript,functional-programming,Javascript,Functional Programming,在libs中实现函数合成有什么好处,比如下划线、lodash和其他类似于此的功能: var compose = function() { var funcs = arguments; return function() { var args = arguments; for (var i = funcs.length; i --> 0;) { args = [funcs[i].apply(this, args)];

在libs中实现函数合成有什么好处,比如下划线、lodash和其他类似于此的功能:

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)); };

后者性能更高。

首先,它更容易阅读。性能很少比这更重要。此外,您还可以制作一个性能几乎相同的专用arity2函数

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

例如:

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

//了解javascript函数组合的简单方法=>
功能组合(…乐趣){
返回函数(值){
var functionList=fun.slice();
while(functionList.length>0){
value=functionList.pop()(值);
}
返回值;
}
}
函数mult2(值){
返回值*2;
}
函数mult3(值){
返回值*3;
}
函数mult5(值){
返回值*5;
}
var composedFun=成分(mult2、mult3、mult5);
console.log(composedFun);
控制台日志(composedFun(1));

console.log(composedFun(2))它很简洁。如果你对性能有如此严格的限制,那么不管怎样,你都会更喜欢速度而不是可读性。我不知道你如何比较这两个…
c
为每个(?)输入产生相同的结果。为什么你认为它不具有可比性?你所说的“合成在运行时可以很容易地改变”是什么意思?