JavaScript中的函数组合
在libs中实现函数合成有什么好处,比如下划线、lodash和其他类似于此的功能: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)];
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
为每个(?)输入产生相同的结果。为什么你认为它不具有可比性?你所说的“合成在运行时可以很容易地改变”是什么意思?