function expression
Baseline Widely available
This feature is well established and works across many devices and browser versions. It’s been available across browsers since July 2015.
Das function
Schlüsselwort kann verwendet werden, um eine Funktion innerhalb eines Ausdrucks zu definieren.
Sie können Funktionen auch mit der function
-Deklaration oder mit der Pfeilsyntax definieren.
Probieren Sie es aus
Syntax
function (param0) {
statements
}
function (param0, param1) {
statements
}
function (param0, param1, /* …, */ paramN) {
statements
}
function name(param0) {
statements
}
function name(param0, param1) {
statements
}
function name(param0, param1, /* …, */ paramN) {
statements
}
Hinweis: Eine Ausdrucksanweisung kann nicht mit dem Schlüsselwort function
beginnen, um Verwechslungen mit einer function
-Deklaration zu vermeiden. Das function
Schlüsselwort beginnt einen Ausdruck nur, wenn es in einem Kontext erscheint, der keine Anweisungen akzeptieren kann.
Parameter
name
Optional-
Der Funktionsname. Kann weggelassen werden, in diesem Fall ist die Funktion anonym. Der Name ist nur lokal im Funktionskörper verfügbar.
paramN
Optional-
Der Name eines formalen Parameters für die Funktion. Siehe die Referenz zu Funktionen für die Syntax der Parameter.
statements
Optional-
Die Anweisungen, die den Körper der Funktion bilden.
Beschreibung
Ein function
Ausdruck ist dem function
Ausdruck sehr ähnlich und hat fast die gleiche Syntax. Der Hauptunterschied zwischen einem function
Ausdruck und einer function
Deklaration ist der Funktionsname, der in function
Ausdrücken weggelassen werden kann, um anonyme Funktionen zu erstellen. Ein function
Ausdruck kann als IIFE (Immediately Invoked Function Expression) verwendet werden, die ausgeführt wird, sobald sie definiert ist. Siehe auch das Kapitel über Funktionen für weitere Informationen.
Hoisting von Funktionsausdrücken
Funktionsausdrücke in JavaScript werden im Gegensatz zu Funktionsdeklarationen nicht gehoben (hoisted). Sie können Funktionsausdrücke nicht verwenden, bevor Sie sie erstellen:
console.log(notHoisted); // undefined
// Even though the variable name is hoisted,
// the definition isn't. so it's undefined.
notHoisted(); // TypeError: notHoisted is not a function
var notHoisted = function () {
console.log("bar");
};
Benannter Funktionsausdruck
Wenn Sie auf die aktuelle Funktion innerhalb des Funktionskörpers verweisen möchten, müssen Sie einen benannten Funktionsausdruck erstellen. Dieser Name ist dann nur lokal im Funktionskörper (Scope) vorhanden. Dies vermeidet die Verwendung der veralteten arguments.callee
Eigenschaft, um die Funktion rekursiv aufzurufen.
const math = {
factorial: function factorial(n) {
console.log(n);
if (n <= 1) {
return 1;
}
return n * factorial(n - 1);
},
};
math.factorial(3); //3;2;1;
Wenn ein Funktionsausdruck benannt ist, wird die name
Eigenschaft der Funktion auf diesen Namen gesetzt, anstatt den impliziten Namen, der aus der Syntax abgeleitet wird (wie die Variable, der die Funktion zugewiesen ist).
Im Gegensatz zu Deklarationen ist der Name der Funktionsausdrücke schreibgeschützt.
"use strict";
function foo() {
foo = 1;
}
foo();
console.log(foo); // 1
(function foo() {
foo = 1; // TypeError: Assignment to constant variable.
})();
Beispiele
Verwendung eines Funktionsausdrucks
Das folgende Beispiel definiert eine unbenannte Funktion und weist sie x
zu. Die Funktion gibt das Quadrat ihres Arguments zurück:
const x = function (y) {
return y * y;
};
Verwendung einer Funktion als Callback
Häufiger wird sie als Callback verwendet:
button.addEventListener("click", function (event) {
console.log("button is clicked!");
});
Verwendung eines Immediately Invoked Function Expression (IIFE)
Eine anonyme Funktion wird erstellt und aufgerufen:
(function () {
console.log("Code runs!");
})();
// or
!function () {
console.log("Code runs!");
}();
Spezifikationen
Specification |
---|
ECMAScript Language Specification # sec-function-definitions |
Browser-Kompatibilität
BCD tables only load in the browser