ich ein Buch lese, die das folgende Beispiel enthält:JavaScript komponieren Funktionen
var composition1 = function(f, g) {
return function(x) {
return f(g(x));
}
};
Dann schreibt der Autor:“... naive Umsetzung der Zusammensetzung, weil es nicht den Ausführungskontext nicht berücksichtigt .. So ist „
die bevorzugte Funktion, dass man:.
var composition2 = function(f, g) {
return function() {
return f.call(this, g.apply(this, arguments));
}
};
Gefolgt von einem ganzen Beispiel:
var composition2 = function composition2(f, g) {
return function() {
return f.call(this, g.apply(this, arguments));
}
};
var addFour = function addFour(x) {
return x + 4;
};
var timesSeven = function timesSeven(x) {
return x * 7;
};
var addFourtimesSeven2 = composition2(timesSeven, addFour);
var result2 = addFourtimesSeven2(2);
console.log(result2);
Könnte mir bitte jemand erklären, warum die Funktion composition2 die bevorzugte ist (vielleicht mit einem Beispiel)?
EDIT:
In der Zwischenzeit habe ich versucht haben Methoden als Argumente zu verwenden, wie vorgeschlagen, aber es hat nicht funktioniert. Das Ergebnis war NaN:
var composition1 = function composition1(f, g) {
return function(x) {
return f(g(x));
};
};
var composition2 = function composition2(f, g) {
return function() {
return f.call(this, g.apply(this, arguments));
}
};
var addFour = {
myMethod: function addFour(x) {
return x + this.number;
},
number: 4
};
var timesSeven = {
myMethod: function timesSeven(x) {
return x * this.number;
},
number: 7
};
var addFourtimesSeven1 = composition1(timesSeven.myMethod, addFour.myMethod);
var result1 = addFourtimesSeven1(2);
console.log(result1);
var addFourtimesSeven2 = composition2(timesSeven.myMethod, addFour.myMethod);
var result2 = addFourtimesSeven2(2);
console.log(result2);
Das hat eigentlich nichts mit Curry zu tun. – Bergi
Sie haben Recht, ich habe den Wortlaut geändert. – JShinigami
Es heißt FUNKTION Zusammensetzung! Warum komponierst du Methoden, um Himmels willen? Funktionszusammensetzung bedeutet, reine Funktionen in Curry-Form ohne Nebenwirkungen im punktfreien Stil zu kombinieren: 'const compose = f => g => x => f (g (x))'. Curry-Funktionen mit Ausnahme nur eines einzigen Arguments (wie unsere 'compose'-Funktion). Funktionszusammensetzung funktioniert nur mit Curry-Funktionen, da eine Funktion nur einen einzelnen Wert zurückgibt. – ftor