JavaScript/Anonyme Funktionen

Vorher: Funktionen Index Nächste: Objektbasierte Programmierung

Eine anonyme Funktion ist eine Funktion, die ohne einen benannten Bezeichner deklariert wurde, um auf sie zu verweisen. Als solche ist eine anonyme Funktion nach ihrer anfänglichen Erstellung normalerweise nicht mehr zugänglich.

Normale Funktionsdefinition:

function hello() { alert('Hello world');}hello();

Anonyme Funktionsdefinition:

var anon = function() { alert('I am anonymous');}anon();

Eine häufige Verwendung für anonyme Funktionen ist die Verwendung als Argumente für andere Funktionen. Eine weitere häufige Verwendung ist die als Closure, siehe dazu auch das Kapitel Closures.

Verwendung als Argument für andere Funktionen:

setTimeout(function() { alert('hello');}, 1000);

Oben wird die anonyme Funktion an setTimeout übergeben, das die Funktion in 1000 Millisekunden ausführt.

Verwendung als Closure:

(function() { alert('foo');}());

Aufschlüsselung der obigen anonymen Anweisungen:

  • Die umgebenden Klammern sind ein Wrapper für die anonyme Funktion
  • Die abschließenden Klammern initiieren einen Aufruf der Funktion und können Argumente enthalten

Eine andere Möglichkeit, das vorherige Beispiel zu schreiben und das gleiche Ergebnis zu erhalten:

(function(message) { alert(message);}('foo'));

Eine alternative Darstellung des obigen Beispiels setzt die einleitenden Klammern an die umgebenden Klammern und nicht an die Funktion selbst, was zu Verwirrung darüber führt, warum die umgebenden Klammern überhaupt benötigt werden.

(function() { // …})();

Einige sind sogar dazu übergegangen, der Technik der nachgestellten Klammern abfällige Namen zu geben, um die Leute zu ermutigen, sie wieder in die umgebenden Klammern zu verschieben, dorthin, wo sie die Funktion einleiten, und nicht in die umgebenden Klammern.

Eine anonyme Funktion kann sich über die lokale Variable arguments.callee auf sich selbst beziehen, was für rekursive anonyme Funktionen nützlich ist:

// returns the factorial of 10.alert((function(n) { return !(n > 1) ? 1 : arguments.callee(n - 1) * n;})(10));

Allerdings ist arguments.callee in ECMAScript 5 Strict deprecated. Die Probleme mit arguments.callee sind, dass es unmöglich ist, eine Schwanzrekursion zu erreichen (ein zukünftiger Plan für JavaScript), und dass es zu einem anderen Wert führt. Anstatt arguments.callee zu verwenden, können Sie stattdessen benannte Funktionsausdrücke verwenden:

// returns the factorial of 10.alert( (function factorial(n) { return (n <= 1) ? 1 : factorial(n - 1) * n;})(10) );

Ein Pfeilfunktionsausdruck ähnelt dem, was in anderen Programmiersprachen als Lambda bekannt ist und 2015 in ECMAScript 6 eingeführt wurde. Er bietet eine Kurzschrift für die Erstellung anonymer Funktionen.

Beispiele:

  • x => x + 1
    • Eine anonyme Funktion mit einem Argument x, die x + 1 zurückgibt.
  • x => {return x + 1}
    • Wie oben, aber mit einem Funktionskörper.
  • (x, y) => x + y
    • Eine 2-Arg-Pfeilfunktion.
  • (x, y) => {Rückgabe x + y}

Links:

  • Funktionen # Der_Pfeilfunktionsausdruck, Entwickler.mozilla.org
  • Funktionen/Pfeilfunktionen, developer.mozilla.org