💡 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:
└── 📦 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!)
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
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!