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 der Pfeilsyntax definieren.

Probieren Sie es aus

Syntax

js
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 Verwirrung mit einer function-Deklaration zu vermeiden. Das function-Schlüsselwort beginnt nur dann einen Ausdruck, wenn es in einem Kontext erscheint, der keine Anweisungen akzeptiert.

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 der Funktion. Für die Syntax der Parameter siehe den Funktionsleitfaden.

statements Optional

Die Anweisungen, die den Körper der Funktion bilden.

Beschreibung

Ein function-Ausdruck ist dem function-Deklaration sehr ähnlich und hat nahezu die gleiche Syntax. Der Hauptunterschied zwischen einem function-Ausdruck und einer function-Deklaration ist der Funktionsname, welcher 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 sofort ausgeführt wird, sobald sie definiert ist. Siehe auch das Kapitel über Funktionen für weitere Informationen.

Heben von Funktionsausdrücken

Funktionsausdrücke in JavaScript werden, anders als Funktionsdeklarationen, nicht angehoben. Sie können Funktionsausdrücke nicht verwenden, bevor Sie diese erstellen:

js
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 im Funktionskörper verweisen möchten, müssen Sie einen benannten Funktionsausdruck erstellen. Dieser Name ist dann nur lokal im Funktionskörper (Gültigkeitsbereich) verfügbar. Dies vermeidet die Verwendung der veralteten arguments.callee-Eigenschaft, um die Funktion rekursiv aufzurufen.

js
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 aus der Syntax abzuleiten (wie die Variable, der die Funktion zugewiesen ist).

Im Gegensatz zu Deklarationen ist der Name der Funktionsausdrücke schreibgeschützt.

js
function foo() {
  foo = 1;
}
foo();
console.log(foo); // 1
(function foo() {
  foo = 1; // TypeError: Assignment to constant variable.
})();

Beispiele

Verwendung von Funktionsausdrücken

Das folgende Beispiel definiert eine unbenannte Funktion und weist sie x zu. Die Funktion gibt das Quadrat ihres Arguments zurück:

js
const x = function (y) {
  return y * y;
};

Verwendung einer Funktion als Rückruf

Häufiger wird sie als Rückruf verwendet:

js
button.addEventListener("click", function (event) {
  console.log("button is clicked!");
});

Verwendung einer sofort aufgerufenen Funktionsausdrucks (IIFE)

Eine anonyme Funktion wird erstellt und aufgerufen:

js
(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

Siehe auch