Das Schlüsselwort function kann benutzt werden, um eine Funktion  innerhalb einer expression zu definieren.

Man kann Funktionen auch mit Hilfe des Function-Konstruktors oder als function declaration definieren.

Syntax

var meineFunktion = function [name]([param1[, param2[, ..., paramN]]]) {
   statements
};

Seit ES2015 können außerdem arrow functions benutzt werden.

Parameter

name
Der Name der Funktion. Dieser kann ausgelassen werden, was in einer anonymen Funktion resultiert. Der Name ist nur im Funktionskörper referenzierbar.
paramN
Der Name eines Arguments, welches in die Funktion gereicht werden soll.
statements
Die Befehle, aus denen der Funktionskörper besteht.

Beschreibung

Eine function expression ist dem function statement sehr ähnlich und hat fast die gleiche Syntax (siehe function statement). Der größte Unterschied zwischen einer function expression und einem function statement ist der Funktionsname, der in der function expression weggelassen werden kann, um eine anonyme Funktion zu erschaffen. Eine function expression kann als IIFE (Immediately Invoked Function Expression) genutzt werden, die sofort nach Definition ausgeführt wird. Im Kapitel functions finden sich weitere Informationen.

Anheben von function expressions

Function expressions in Javascript werden nicht automatisch an den Beginn des Scopes gehoben (hoisted), anders als  function declarations. Funktionsausdrücke können nicht for Definition im Code aufgerufen werden.

notHoisted(); // TypeError: notHoisted is not a function

var notHoisted = function() {
   console.log('bar');
};

Benennende function expressions

Wenn man die aktuelle Funktion innerhalb des Funktionskörpers referenzieren will, muss eine Benennende function expression erstellt werden. Dieser Name ist nur im Funktionskörper referenzierbar. Das verhindert gleichzeitig den nicht standardisierten Gebrauch der arguments.callee  Eigenschaft.

var math = {
  'fakultaet': function fakultaet(n) {
    if (n <= 1)
      return 1;
    return n * fakultaet(n - 1);
  }
};

Die Variable, die einer function expression zugewiesen wurde, hat eine name Eigenschaft. Wenn der Name der Funktion ausgelassen wird, wird dies der Variablenname sein (implizierter Name). Ist die Funktion benannt, wird in der Eigenschaft der Funktionsname zu finden sein (expliziter Name). Dies trifft auch auf arrow functions zu (diese haben keinen Namen so dass der Variablenname nur implizit gesetzt werden kann)

var foo = function() {}
foo.name // "foo"

var foo2 = foo
foo2.name // "foo"

var bar = function baz() {}
bar.name // "baz"

Beispiele

Das folgende Beispiel definiert eine unbenannte Funktion und weist sie x zu. Die Funktion gibt die Quadratur ihres Argumentes zurück.

var x = function(y) {
   return y * y;
};

Meistens werden function expression in callbacks genutzt:

button.addEventListener('click', function(event) {
    console.log('button wurde geklickt!')
})

Spezifikationen

Spezifikation Status Kommentar
ECMAScript Latest Draft (ECMA-262)
Die Definition von 'Function definitions' in dieser Spezifikation.
Entwurf  
ECMAScript 2015 (6th Edition, ECMA-262)
Die Definition von 'Function definitions' in dieser Spezifikation.
Standard  
ECMAScript 5.1 (ECMA-262)
Die Definition von 'Function definition' in dieser Spezifikation.
Standard  
ECMAScript 3rd Edition (ECMA-262)
Die Definition von 'Function definition' in dieser Spezifikation.
Standard Initiale Fefinition. Implementiert in JavaScript 1.5.

Browserkompatibilität

Wir konvertieren die Kompatibilitätsdaten in ein maschinenlesbares JSON Format. Diese Kompatibilitätstabelle liegt noch im alten Format vor, denn die darin enthaltenen Daten wurden noch nicht konvertiert. Finde heraus wie du helfen kannst!

Feature Chrome Edge Firefox (Gecko) Internet Explorer Opera Safari
Grundsätzliche Unterstützung (Ja) (Ja) (Ja) (Ja) (Ja) (Ja)
Komma nach dem letzten Parameter ? ? 52.0 (52.0) ? ? ?
Feature Android Chrome for Android Edge Firefox Mobile (Gecko) IE Mobile Opera Mobile Safari Mobile
Grundsätzliche Unterstützung (Ja) (Ja) (Ja) (Ja) (Ja) (Ja) (Ja)
Komma nach dem letzten Parameter ? ? ? 52.0 (52.0) ? ? ? ?

Siehe auch

Schlagwörter des Dokuments und Mitwirkende

 Mitwirkende an dieser Seite: christianrhansen, vssn, amelzer
 Zuletzt aktualisiert von: christianrhansen,