Nimm die Variable aus der temporalen Totzone

9

Siehe diesen Code:

%Vor%

Das erste Skript versucht, foo über eine Destrukturierungszuweisung deklarieren zu lassen. % Co_de% kann jedoch nicht destrukturiert werden, daher löst die Zuweisung einen TypeError aus.

Das Problem ist, dass dann die Variable null deklariert, aber nicht initialisiert ist. Wenn ich also im 2. Skript versuche, auf foo zu verweisen, wird Folgendes ausgelöst:

%Vor%

Und foo Variablen können nicht neu deklariert werden:

%Vor%

Gibt es eine Möglichkeit, es aus der TDZ herauszunehmen, damit ich Werte zuweisen und sie lesen kann?

    
Oriol 15.04.2016, 16:18
quelle

1 Antwort

2

Es ist unmöglich. Temporäre Totzone und eingeschränkter Zugriff auf nicht initialisierte let Variable werden voraussichtlich unvermeidlich sein. Es ist verwirrend und problematisch, aber beabsichtigt und erwartet.

Einzelheiten finden Sie in der Spezifikation :

  

HINWEIS Die Deklarationen let und const definieren Variablen, die auf die LexicalEnvironment des Ausführungskontexts beschränkt sind. Die Variablen werden erstellt, wenn ihr Lexical Environment instanziiert wird, aber auf keinen Fall zugegriffen werden darf, bis die LexicalBinding der Variablen ausgewertet wurde . Eine Variable, die durch ein LexicalBinding mit einem Initialisierer definiert wird, erhält den Wert der Zuweisungsausdruck des Initializers, wenn LexicalBinding ausgewertet wird, nicht wenn die Variable erstellt wird. Wenn ein LexicalBinding in einer let-Deklaration keinen Initialisierer hat, erhält die Variable den Wert undefined, wenn LexicalBinding ausgewertet wird. \

Wenn also die Variable bei der Deklaration nicht initialisiert wurde (und das Werfen vor der Initialisierung offensichtlich zu keiner Initialisierung führt), kann auf keinen Fall darauf zugegriffen werden.

Aber in der Tat ist Ihr Problem komplexer als das Werfen von Aufgaben. Es ist Architekturproblem - Sie sind abhängig von veränderbaren globalen Variablen. Es ist groß "Nein, nein, nein" und Sie sollten Ihren Code so umgestalten, dass explizite Abhängigkeiten verwendet werden.

    
Ginden 29.07.2016, 12:28
quelle