JavaScript: Verweisen Sie auf einen lokalen Bereich einer Funktion als Objekt

Lesezeit: 4 Minuten

JavaScript Verweisen Sie auf einen lokalen Bereich einer Funktion als
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.

  • 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() oder new Function().

    – Brandon McConnell

    3. Juni 2021 um 13:37 Uhr

JavaScript Verweisen Sie auf einen lokalen Bereich einer Funktion als
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.

  • Wow, diese Spezifikationen sind wirklich mühsam zu lesen. In jedem Fall scheinen sie, soweit ich das beurteilen kann, darauf hinzudeuten, dass die einzigen lokalen Variablen abgesehen von Parametern und den definierten lokalen Variablen Argumente und Länge sind. Das sollte mich bewegen, danke. Ich baue eine Bibliothek, und die erste Funktion, die ich mache, ist eine konsistente Version von setInterval, dafür ist das gedacht. Alles scheint so viel komplizierter zu werden, wenn Sie eine glänzende, abstrahierte Oberfläche bereitstellen.

    – aaaaaaaaaa

    8. April 2010 um 15:48 Uhr


  • @eBusiness: Ja, ja, das tut es. 🙂 Vergessen Sie keine benannten Funktionen, die innerhalb der Funktion deklariert sind, das sind auch Symbole im Gültigkeitsbereich.

    – TJ Crowder

    8. April 2010 um 16:03 Uhr


1647134113 527 JavaScript Verweisen Sie auf einen lokalen Bereich einer Funktion als
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.

  • Ich finde das genial!

    – Gershom Maes

    10. Oktober 2017 um 4:42 Uhr

JavaScript Verweisen Sie auf einen lokalen Bereich einer Funktion als
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ß)

  • arguments ist eine Variable, die alle Argumente enthält, die an die aktuelle Funktion übergeben werden.

    – Nickf

    8. April 2010 um 13:55 Uhr

  • @nickf: Das ist mir klar. In bestimmten Versionen von Netscape gab es eine spezielle Eigenschaft, die sich auf den Variablenbereich bezog.

    – SLaks

    8. April 2010 um 13:57 Uhr


  • @nickf: Ich habe es zuerst auch falsch verstanden, aber da ich SLaks kannte, habe ich es ein zweites Mal gelesen und verstanden, was er meinte. 🙂

    – TJ Crowder

    8. April 2010 um 13:58 Uhr

  • Interessant, aber ich fürchte, das, was in “Bestimmte Versionen von Netscape” verfügbar ist, reicht in der modernen Webentwicklung einfach nicht aus 😉

    – aaaaaaaaaa

    8. April 2010 um 14:24 Uhr

  • Es könnte noch in Firefox existieren. Sie haben jedoch Recht; das hilft dir nicht wirklich weiter.

    – SLaks

    8. April 2010 um 14:27 Uhr

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.

  • Wenn mein Ziel einfach darin bestand, seltsamen Code zu schreiben, wäre das eine gute Lösung gewesen 🙂

    – aaaaaaaaaa

    8. April 2010 um 17:34 Uhr

  • Lol. Ich sehe nicht, wie es seltsam ist, da Sie nur eine einfache Klassenstruktur erstellen.

    – Ivo Sabev

    8. April 2010 um 17:45 Uhr

995540cookie-checkJavaScript: Verweisen Sie auf einen lokalen Bereich einer Funktion als Objekt

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy