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