🌐 JavaScript Grundlagen

JS 03: Funktionen, Scope & Closures

Meistere moderne Funktionsdeklarationen, Arrow Functions, Rest-Parameter, Gültigkeitsbereiche und Closures.

💡 1. Funktionsarten & Moderne Parameter

JavaScript bietet klassische Deklarationen, Funktionsausdrücke und moderne Arrow Functions. Mit Default- und Rest-Parametern schreibst du flexiblen Code:

// 🎯 1. Arrow Function mit implizitem Return:
const verdopple = x => x * 2;

// 🎯 2. Default-Parameter:
function begruesse(name = "Gast") {
  return `Willkommen, ${name}!`;
}

// 🎯 3. Rest-Parameter (...sammelt alle Argumente als Array):
function summiere(...zahlen) {
  return zahlen.reduce((sum, n) => sum + n, 0);
}
console.log(summiere(10, 20, 30)); // 60

🌍 2. Gültigkeitsbereiche (Scope Hierarchy)

Variablen sind immer nur in ihrem deklarierten Bereich gültig. let und const erzeugen echte Block-Scopes:

🌍 Global Scope: Überall im Skript verfügbar
└── 📦 Function Scope: Nur innerhalb der Funktion sichtbar
    └── 🔒 Block Scope ({ let x = 1; }): Nur innerhalb des { }-Blocks
function scopeTest() {
  const inside = "Ich lebe nur in der Funktion";
  if (true) {
    const block = "Ich lebe nur im if-Block";
  }
  // console.log(block); // ❌ ReferenceError: block is not defined
}

🔐 3. Closures: Funktionen mit Gedächtnis

Eine Closure entsteht, wenn eine innere Funktion auf Variablen ihrer umgebenden Funktion zugreift – auch nachdem die äußere Funktion beendet ist:

function erstelleZaehler(start = 0) {
  let counter = start; // Kapselung (private Variable)

  return function() {
    counter++;
    return counter;
  };
}

const zaehlerA = erstelleZaehler(0);
console.log(zaehlerA()); // 1
console.log(zaehlerA()); // 2

const zaehlerB = erstelleZaehler(100);
console.log(zaehlerB()); // 101 (Komplett unabhängig von zaehlerA!)
🔐 Didaktische Analogie: Der Tresor mit Geheimzahl

Die äußere Funktion ist der Tresorbauer: Sie konstruiert ein geschütztes Gehäuse (die privaten Variablen) und händigt dir lediglich einen Schlüsselanhänger (die zurückgegebene innere Funktion) aus.

Niemand kann von außen in den Tresor greifen – nur durch Drehen des Schlüssels (Funktionsaufruf) wird das interne Zahnrad weitergedreht. Jeder neue Aufruf der äußeren Funktion baut einen neuen, isolierten Tresor!

📑 4. Cheat-Sheet: Funktionen & Scopes

Konzept Syntax / Beispiel Besonderheit
Arrow Function const f = (x) => x * 2; Kompakt, lexikalisches this
Default-Parameter function f(a = 10) { ... } Greift bei fehlendem Argument / undefined
Rest-Parameter function f(...args) { ... } Sammelt alle Parameter in ein Array
Block Scope { const x = 42; } Gültigkeit beschränkt auf geschweifte Klammern
Closure return () => ++counter; Behält Zugriff auf Variablen des Erzeugungs-Scopes

🎯 Aufgaben & Checkliste in aufgabe.js

💡 Tipp für Teilziel 1 & 4

Für erstelleZaehler deklariere let zaehler = startWert; in der äußeren Funktion und gib eine innere Funktion zurück, die zaehler++ rechnet und den neuen Wert zurückliefert!

💻 In Web-IDE öffnen → ← Zurück zu JS 02 Weiter zu JS 04 →