let q = 17; let x = do { let y = { test: 1, pest: 2 }; let z = { test: 7, pest: 8 }; if (q == 17) function(i) { return z[i]; } else function(i) { return y[i]; } }; alert(x('test'));
Hab ich da jetzt eine Closure geschnürt?
Zwei Closures sogar. Denn beide Funktionen binden Variablen aus dem umgebenden Geltungsbereich, das macht einen Closure auch schon aus. Das kennt man aus dem Matherunterricht vielleicht noch als Funktionsschar $$f_a(x) = ax$$. Hier ist das $$a$$ eine "Umgebungsvariable". In deinem Beispiel spielen z
und y
diese Rollen.