Betrachten Sie diesen CodeWie eine neue Variable in einem Verschluss zu schaffen
'use strict';
var factory =() => script => eval(script);
var closure = factory();
closure('var v = 0');
var val = closure('typeof v');
console.log(val);
Dies ist mein Versuch, es zu erreichen. Ich möchte eine Schließung erstellen und dann Benutzern ermöglichen, eine neue lokale Variable in dieser Schließung zu erstellen. Ist das überhaupt möglich?
Ich irgendwo gelesen, dass "native Funktion 'eval' kann sogar eine neue Variable im lokalen Kontext der Ausführung erstellen.". Also, warum funktioniert das nicht in meinem Beispiel? Meine Vermutung ist, dass dies daran liegt, dass die Ausführung der Funktion und die Anzahl der Variablen nach Ende der Funktion nicht geändert werden kann, aber ich bin mir nicht sicher.
Mein Beispielskript erstellt eine Schließung und versucht, die neue Variable v
in dieser Schließung zu deklarieren und zu initialisieren und ihr die Nummer 0
zuzuweisen. Ich habe erwartet, dass das Ergebnis von typeof v
number
sein sollte, aber es ist tatsächlich undefined
.
Also, ich habe zwei Fragen:
- Warum es nicht schafft die Variable
v
wie erwartet - Wie tatsächlich zu erreichen, dass (was das Arbeitsbeispiel wäre)?
Was genau sind Sie tryin hier zu bauen? Wie wäre es mit dem Erstellen eines Objekts zum Speichern Ihres Kontexts und Hinzufügen von Eigenschaften zu diesem Objekt, anstatt zu versuchen, sich in Schließungen zu hacken? – Thomas
Warum brauchen Sie das? Ich habe eine Antwort zu 75% fertig, aber ich habe gemerkt, wie merkwürdig und nutzlos das scheint. Warum müssen Sie in einem solchen Bereich neue Variablen erstellen? Und jedes Mal, wenn Sie 'closure' aufrufen, erstellen Sie einen neuen Bereich. Alle Aufrufe von 'closure' sind nicht" verbunden ". – Carcigenicate
@Thomas. Ich weiß, dass ich stattdessen Objekt verwenden kann, aber ich frage nur nach dieser Methode, um besser zu verstehen, wie Javascript funktioniert. –