Javascript 将嵌套函数作为参数传递
有没有办法嵌套函数并将其作为参数传递? 我有两个功能:Javascript 将嵌套函数作为参数传递,javascript,functional-programming,purely-functional,Javascript,Functional Programming,Purely Functional,有没有办法嵌套函数并将其作为参数传递? 我有两个功能: function mayus(string) { return string.toUpperCase(); } function removeA(string) { return string.replace(/A/g, ""); } 我想用两种不同的方式来应用它们 function stringHandler1(stringID) { var newString = mayus(removeA(getStrin
function mayus(string) {
return string.toUpperCase();
}
function removeA(string) {
return string.replace(/A/g, "");
}
我想用两种不同的方式来应用它们
function stringHandler1(stringID) {
var newString = mayus(removeA(getString(stringID)));
return newString;
}
function stringHandler2(stringID) {
var newString = removeA(mayus(getString(stringID)));
return newString;
}
这两个StringHandler返回的字符串略有不同,但它们非常相似。有没有一种方法可以使用一个字符串处理程序来接受两个参数:stringID和操作
function stringHandlerINeed(string, operation) {
var newString = operation(string);
alert(newString);
}
我想做一些像
纵梁扶手线516AF2,Mayusremova
更新:
我将jJ标记为答案,因为它不需要我更改我已经拥有的任何函数,这是我一直在寻找的概念,但通过juvian,它如此简单,让我希望我已经想出了它。我能想到的最佳方法是根据操作顺序以数组形式发送函数,然后一次评估每一个:
function stringHandlerINeed(string, operation) {
var newString=string;
for(var i =0; i< operation.length;i++){
newString=operation[i](newString);
}
alert(newString);
}
stringHandlerINeed("516af2", [mayus,removeA]) // alerts 516F2
我能想到的最好方法是根据操作顺序发送数组中的函数,然后一次对每个函数求值:
function stringHandlerINeed(string, operation) {
var newString=string;
for(var i =0; i< operation.length;i++){
newString=operation[i](newString);
}
alert(newString);
}
stringHandlerINeed("516af2", [mayus,removeA]) // alerts 516F2
我走的是和朱维亚相同的方向,但更简单 在这个JSFIDLE中,我传入了我想要操作的字符串和函数,然后执行这些操作并返回新字符串
StringHandlerined516AF2,mayusremoveA的问题在于,当您调用mayusremoveA时,这意味着您实际上正在调用正在传递另一个函数的mayus函数。当它转到大写的函数时,javascript将抛出一个错误 我和朱维亚人走的是同一个方向,但更简单 在这个JSFIDLE中,我传入了我想要操作的字符串和函数,然后执行这些操作并返回新字符串
StringHandlerined516AF2,mayusremoveA的问题在于,当您调用mayusremoveA时,这意味着您实际上正在调用正在传递另一个函数的mayus函数。当它转到大写的函数时,javascript将抛出一个错误 您真正想要的可能是函数合成。。。实现它的一种方法如下:
function compose() {
var fns = Array.prototype.slice.call(arguments);
return function (arg) {
fns.forEach(function (fn) {
arg = fn(arg);
});
return arg;
};
}
compose(mayus, removeA)('axA'); // -> "X"
compose(removeA, mayus)('axA'); // -> "AX"
这一概念的应用层出不穷。您可以使用在compose中链接的任意数量的函数。您可以将组合函数命名为:
var mayusRemoveA = compose(mayus, removeA);
您还可以创建一个常量函数,类似于上面的处理程序,而不是直接调用组合函数来计算的值
var theHandlerINeed = compose(function () { return 'axA'; }, mayus, removeA);
theHandlerINeed(); // -> "X"
你真正想要的可能是函数合成。。。实现它的一种方法如下:
function compose() {
var fns = Array.prototype.slice.call(arguments);
return function (arg) {
fns.forEach(function (fn) {
arg = fn(arg);
});
return arg;
};
}
compose(mayus, removeA)('axA'); // -> "X"
compose(removeA, mayus)('axA'); // -> "AX"
这一概念的应用层出不穷。您可以使用在compose中链接的任意数量的函数。您可以将组合函数命名为:
var mayusRemoveA = compose(mayus, removeA);
您还可以创建一个常量函数,类似于上面的处理程序,而不是直接调用组合函数来计算的值
var theHandlerINeed = compose(function () { return 'axA'; }, mayus, removeA);
theHandlerINeed(); // -> "X"