Gibt es einen Unterschied zwischen 'Export Standard x' und 'Export {x Standard}'?

8

Ich verstehe, dass bei ES6-Modul-Exporten eine Bindung zwischen dem, was exportiert wird und dem, was importiert wird, stattfindet, so dass die importierte Variable diese Änderung bei der Änderung der exportierten Variablen demonstriert.

Ich habe aber auch gelesen, dass die importierte Variable unter bestimmten Umständen nur die Bindung an die exportierte Variable trägt.

Meine spezifische Frage ist, ob es einen Unterschied in der Art gibt, wie die exportierten Variablen in den folgenden zwei Szenarien gebunden sind ...

%Vor%     
sfletche 01.09.2016, 16:29
quelle

2 Antworten

8

Sie sind im allgemeinen Fall nicht gleich, obwohl sie sich im Falle von Funktionen und Klassen gleich verhalten können.

%Vor%

entspricht

%Vor%

bedeutet das

%Vor%

wird 4 als exportierten Wert beibehalten, obwohl a innerhalb des Moduls geändert wurde, während export {a as default}; den exportierten Wert 5 ergeben würde.

Die ECMAScript-Spezifikation definiert drei verschiedene Formen von export default , mit einigen Beispielen in dieser Tabelle Ссылка und in der Hauptsyntax-Deklaration für die Exporte: Ссылка

%Vor%

mit HoistableDeclaration in diesem Fall Zuordnung zu Funktionsdeklarationen und Generatordeklarationen.

Wenn wir uns die Spezifikation ansehen, in der die Zuordnung von Variablennamen in der Datei zu exportierten Namen definiert ist, Ссылка

%Vor%

BoundNames gibt hier den Namen der Funktion oder Klasse zurück, die als Wert übergeben wurde, also in den ersten beiden Fällen

%Vor%

exportiert Live-Bindungen für die Variablen fn oder cls .

Sie könnten das auch tun

%Vor%

In diesem Fall werden diese Werte ohne Live-Bindungen exportiert, da sie keinen Namen haben.

Im letzten Fall von export default AssignmentExpression ; ist dies Ihr Beispiel für export default a; . Sie können feststellen, dass [[LocalName]]: *default* und nicht [[LocalName]]: localName wie die anderen sind. Das liegt daran, dass export default a; a nicht als den exportierten Namen erkennt, sondern als den aktuellen Wert von a als exportierten Wert. Dies ist nicht anders als export default 4; , es hat keinen Namen aus der Sicht der Spezifikation.

Im Wesentlichen

%Vor%

entspricht

%Vor%

aber

%Vor%

entspricht nicht:

%Vor%     
loganfsmyth 01.09.2016, 16:56
quelle
0

Wie gesagt in

Mozilla-Dokumente

Szenario 1

Es wird für benannte Exporte verwendet

%Vor%

Szenario 2

Es wird verwendet, um einen einzelnen Wert zu exportieren oder einen Fallback-Wert für das Modul zu haben

%Vor%

Es gibt jedoch keine Angabe über den Unterschied in der Leistung.

    
Rodrigo Mata 01.09.2016 16:48
quelle