Orlok: this

Beitrag lesen

Hallo

Hast du meine andere Frage übergangen?

Ja, weil ich sie nicht so richtig verstanden habe. Du hattest erst etwas von „Funktionsobjekten“ geschrieben, dann aber gefragt:

Mit welcher JS Version ist es möglich anonyme Objekte als Funktionsparameter und Rückgabewert zu erhalten.

Ich nehme an, mit „anonymen Objekten“ meinst du Objektliterale, wie in deinem Beispiel hier:

var bar = function( /**/ ) {
  /**/
  return { /**/ };
};

var foo = bar({ /**/ });

Da brauchst du dir um die „JS Version“ keine Gedanken zu machen. Das kannst du genauso schreiben, wie du es hier gemacht hast. Das gilt im Übrigen auch für Funktionsobjekte. Die kannst du ebenfalls als Argument übergeben oder als Rückgabewert verwenden.

function foo (bar) {
  return bar;
}

const baz = foo(function ( ) {
  return true;
});

console.log(baz( )); // true

Dieses Beispiel von dir ist allerdings kaputt:

var foo = {
  /**/
  baz : function() { /**/ },
  bar : return { /**/ }
};

Das Schlüsselwort return darf da nicht stehen. Das ergibt auch keinen Sinn, denn du weist hier einer Objekteigenschaft einen Wert zu und bist nicht im Körper einer Funktion.

Kannst du mir kurz n Anwendungsbeispiel für Currying geben?

Ein gutes Anwendungsbeispiel fällt mir dazu nicht ein. Ich bin eher Theoretiker. ;-)

Aber als Currying bezeichnet man allgemein die Übersetzung einer Funktion mit mehreren Parametern in eine Reihe von Funktionen, die jeweils nur einen Parameter besitzen.

Ein klassisches Beispiel hierfür sieht in etwa so aus:

function add (a, b) {
  if (b === undefined) {
    return function (b) {
      return a + b;
    }
  }
  return a + b;
}

let result = add(2, 3);

console.log(result); // 5

Wird die Funktion mit zwei Argumenten aufgerufen, dann werden die beiden Werte addiert und das Ergebnis wird zurückgegeben.

const fn = add(4);

result = fn(7)

console.log(result); // 11

Wird die Funktion hingegen nur mit einem Argument aufgerufen, ist der zweite Parameter also undefined, dann wird eine Funktion zurückgegeben, die nur noch einen Parameter besitzt. Der beim ersten Aufruf übergebene Wert wird durch den Funktionsabschluss (Closure) gespeichert.

Wenn die beim ersten Aufruf zurückgegebene Funktion nun mit einem Argument aufgerufen wird, dann wird der gespeicherte Wert aus dem ersten Aufruf mit dem neuen Wert addiert und das Ergebnis wird zurückgegeben.

Auf diese Weise hat man eine Funktion mit zwei Parametern in zwei Funktionen mit je einem Parameter zerlegt.

PS: Du muss mich entschuldigen. Das was du Ausgibig erklärt hast, kann ich nur sehr schwer verstehen. Erst durch deine simplen sehr guten Anschaulichen Anwendungsbeispiele habe ich es verstanden. Der Umfang an Text erschwert mir das verständnis ebenfalls. Das hat überhaupt nichts mit der ausführlichen Erklärungen zutun sondern eben mit meiner Sprachbehinderung. Wenn möglich, kurz und präzise. Fachbegriffe generell in den Erklärungen sind explizit für mich ebenfall sehr hilfreich. Z.B. dt. Rückgabewert kann ich mir n Kassenbon der realenwelt oder n Integer als Returnwert der Programmierwelt vorstellen. Beidest verschwimmt in den Beiträgen sehr sodass ich nicht mehr weis wo ich mich bewege. Diese Bitte ist an alle gerichtet.

Ich glaube du musst eher mich entschuldigen. ;-)

Ich habe einfach nicht daran gedacht, dass der lange Text dir Schwierigkeiten bereiten könnte. Aber es fällt mir auch schwer einzuschätzen, womit du klarkommst und womit nicht. Von daher, vielen Dank für dein Feedback! +1

Hoffentlich war dieser Beitrag etwas besser lesbar.

Viele Grüße,

Orlok