
aaaaaaaaaa
Wenn ich eine Funktion aufrufe, wird für diesen Aufruf ein lokaler Bereich erstellt. Gibt es eine Möglichkeit, diesen Bereich direkt als Objekt zu referenzieren? Genauso wie window eine Referenz für das globale Bereichsobjekt ist.
Beispiel:
function test(foo){
var bar=1
//Now, can I access the object containing foo, bar, arguments and anything
//else within the local scope like this:
magicIdentifier.bar
}
Hat alternativ jemand eine vollständige Liste dessen, was sich zusätzlich zu den benutzerdefinierten Variablen im lokalen Bereich befindet?
Hintergrund: Ich versuche, innerhalb eines Funktionsaufrufs vollständig in den globalen Bereich zu wechseln, die with-Anweisung ist ein Witz, der Aufruf funktioniert etwas besser, aber es bricht immer noch für alles, was im Funktionsbereich deklariert ist, aber nicht in globaler Geltungsbereich, daher würde ich diese wenigen Fälle zum globalen Geltungsbereich erklären, aber dazu muss ich wissen, was sie sind. Die IE-Funktion execScript macht eine komplette Verschiebung, aber das löst nur das Problem für IE.
Hinweis: An alle, die JavaScript dynamisch laden, setTimeout(code,1)
ist ein einfacher effektiver Hack, um eine globale Reichweite zu erreichen, aber er wird nicht sofort ausgeführt.

TJ Crowder
Nein, es gibt keine Möglichkeit, auf die zu verweisen Variablenobjekt des Ausführungskontexts einer Funktion verbindliches Objekt des variable Umgebung des Ausführungskontext (so heißt das Ding [now; hence the strikethrough]; Details ein §10.3 der Spezifikation). Sie können nur auf die eingeschränkte Ansicht zugreifen, die Sie erhalten arguments
(was in der Tat sehr begrenzt ist).
Wenn ich dies tun wollte, habe ich normalerweise einfach alles, was ich wollte, auf ein Objekt gelegt und es dann verwendet (z. B. an eine Funktion übergeben). Natürlich haben alle innerhalb des Kontexts erstellten Funktionen Zugriff auf alles im Geltungsbereich, in dem sie erstellt wurden, da sie den Kontext „überschließen“; mehr: Verschlüsse sind nicht kompliziert.

Dom Hastings
Ich weiß, dass dies sehr spät ist und Sie wahrscheinlich nicht einmal mehr interessiert sind, aber ich war auch an der Machbarkeit interessiert, und Sie sollten in der Lage sein, eine Art Umgehung vorzunehmen, indem Sie Folgendes verwenden:
(function(global) {
var testVar = 1;
global.scope = function(s) {
return eval(s);
}
})(this);
dann läuft:
scope('testVar'); // 1
gibt die Variable innerhalb der Closure zurück. Nicht besonders schön, aber theoretisch möglich, das in ein Objekt zu packen, vielleicht mit etwas Validierung und Gettern und Settern, wenn Sie es brauchen?
Bearbeiten: Nachdem ich die Frage erneut gelesen habe, gehe ich davon aus, dass Sie darauf zugreifen möchten, ohne eine Funktion im Bereich selbst angeben zu müssen, daher ist dies wahrscheinlich nicht anwendbar. Ich lasse das trotzdem hier.

SLaks
Bestimmte Versionen von Netscape hatten eine magische Eigenschaft in der arguments
Objekt, das getan hat, wonach Sie suchen. (Ich kann mich nicht erinnern, wie es hieß)
Sie benötigen kein Schlüsselwort, um auf eine Variable im lokalen Gültigkeitsbereich zu verweisen, da Es ist der Bereich, in dem Sie sich befinden.
9955400cookie-checkJavaScript: Verweisen Sie auf einen lokalen Bereich einer Funktion als Objektyes
Wenn Sie auf das Objekt zugreifen müssen, das die enthält
foo
Argument innerhalb der Funktion, warum dieses Objekt nicht direkt als Argument übergeben?– Darin Dimitrow
8. April 2010 um 13:53 Uhr
@aaaaaaaaaaaa hast du jemals eine praktikable Lösung dafür gefunden? Ich wäre sehr interessiert, insbesondere an einer Lösung, die auch für blockbezogene Variablen OHNE Verwendung funktioniert
eval()
odernew Function()
.– Brandon McConnell
3. Juni 2021 um 13:37 Uhr