5 Stimmen

Wie greife ich dynamisch auf eine lokale Variable (über eine String-Form ihres Namens) aus einem Closure-Bereich zu?

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.

3voto

jmbucknall Punkte 2051

Sie verwechseln lokale Variablen (die keine Eigenschaften eines Objekts sind) mit Eigenschaften (die keine lokalen Variablen sind). Es gibt keine Antwort auf Ihre Frage, oder besser gesagt, die Antwort lautet "es geht nicht".

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X