In Javascript bin ich es gewohnt, auf Variablen innerhalb eines bekannten Namensraums "dynamisch" (korrigiere mich, wenn ich hier das falsche Wort benutze) zugreifen zu können, indem ich den []
-Operator verwende. Zum Beispiel (aus dem globalen Namensraum):
var a = 1;
window['a']; # => 1
Oder aus einem Objekttyp-Namensraum:
var a = { b: 1 };
a['b']; # => 1
Und ich kenne die Grundlagen davon, wie this
bestimmt wird:
var a = function(){ return this['c']; };
var b = { c: 1 };
a.apply(b); # => 1;
Aber innerhalb einer Funktion selbst, wie greife ich auf lokale Variablen zu, die ich gerade instanziiert (oder neu definiert) habe, indem ich var
verwende?
Insbesondere möchte ich, dass der folgende Funktionsaufruf 1
zurückgibt, aber ohne a
aufzurufen:
function(){
var a = 1;
return a;
}
Sie können nicht window['a']
verwenden, weil a
lokal definiert ist, und Sie können nicht this['a']
verwenden, weil this
je nach Kontext, aus dem die Funktion aufgerufen wird, wechselt.
In einer realistischen Umgebung würde ich einfach umbauen, um das dynamische Erstellen und Zugreifen auf lokale Variablen zu vermeiden, da es im Allgemeinen sowieso keine gute Idee ist. Aber als akademische Frage frage ich mich, ob es überhaupt möglich ist, auf a
über seinen Zeichenkettennamen zuzugreifen.