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.

Description

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. Funktionsausrü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!')
})

Specifications

Specification Status Comment
ECMAScript Latest Draft (ECMA-262)
Die Definition von 'Function definitions' in dieser Spezifikation.
Lebender Standard  
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.

Browser compatibility

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) ? ? ? ?

See also

Schlagwörter des Dokuments und Mitwirkende

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