Sobes.tech
Junior

Was weißt du über die Unterschiede zwischen einer Funktionsausdruck (function expression) und einer Funktionsdeklaration (function declaration)?

sobes.tech KI

Antwort von AI

Funktionsausdrücke können sowohl benannt als auch anonym sein. Funktionsdeklarationen haben immer einen Namen.

Der Hauptunterschied liegt im Hoisting-Mechanismus:

  • Funktionsdeklaration: Wird vollständig hochgehoben, einschließlich des Körpers. Die Funktion ist im Code vor ihrer tatsächlichen Deklaration aufrufbar.
  • Funktionsausdruck: Nur die Variable, der sie zugewiesen ist (wenn var verwendet wird), wird hochgehoben. Die Funktion selbst ist erst nach Erreichen der Zeile mit ihrer Definition verfügbar. Bei let und const gibt es kein Hoisting, auch nicht für die Variable.
// Funktionsdeklaration
console.log(declarationFunc()); // Funktioniert, die Funktion wurde hochgehoben

function declarationFunc() {
  return "Ich bin eine Deklaration";
}

// Funktionsausdruck
// console.log(expressionFunc()); // Wirft TypeError oder ReferenceError (abhängig von var/let/const)

const expressionFunc = function() {
  return "Ich bin ein Ausdruck";
};

console.log(expressionFunc()); // Funktioniert nach der Definition

Funktionsdeklarationen sind für den allgemeinen Gebrauch vorzuziehen, da ihre Reihenfolge im Code die Aufrufbarkeit nicht beeinflusst. Funktionsausdrücke werden häufig verwendet für:

  • Erstellen anonymer Funktionen (z.B. als Argumente oder sofort aufgerufene Funktionsausdrücke - IIFE).
  • Bedingte Definition von Funktionen.
  • Erstellen von Closures.