2017-12-02 3 views
0

Was ich von früheren Posts und Artikeln bekomme, ist, dass das Export-Objekt auf dem Objekt global befindet. Ich kam dieser Code über die mir verwirrt:var exports = module.exports = {} in NodeJS

let blue = 'blue' 
let red = 'red' 

var exports = module.exports = { 
    red, 
    blue 
}; 

Dieser Code setzt module.exports auf eine Variable mit dem Namen exports, die dann auf ein Objekt gesetzt wird, die exportiert wird.

Ich bin aber verwirrt durch diese Syntax:

Example1:

var exports = module.exports = {} 

Wie funktionierts genau? Denn normalerweise kann man in JS eine Variable nicht zweimal zuordnen. Zum Beispiel ergibt dies einen Fehler:

Example2:

let foo = 5 = 4; 

Wie funktioniert der Code in Beispiel 1 keinen Fehler geben, während der Code in Beispiel 2 tut?

+0

Es ist 'exports = (module.exports = {});'.Er weist das Objekt (aus dem Objektliteral erstellt) beiden Zielen zu. – Bergi

Antwort

2
let foo = 5 = 4; 

Ursache seiner von rechts nach links analysiert:

let foo = (5 = 4); 

Und 5 keine Variable ist, so man kann Sachen zuweisen. Es funktioniert jedoch mit einem Bezeichner:

let bar; 
let foo = bar = 5; 
1

Ihre Interpretation von was die Zeile tut, ist falsch.

This code sets module.exports to a variable called exports which then gets set to an object which gets exported.

Was tatsächlich passiert ist, dass der Wert { red, blue } auf module.exports zugeordnet ist, und dann, dass gleichen Wert ({ red, blue }) wird auf exports zugeordnet.

In JavaScript und anderen Sprachen mit ähnlicher Syntax (C, C++, C#, Java) someAssignableThing = someValue wird als Ausdruck behandelt, und Sie können a = b als Unterteil anderer Ausdrücke und Ketten so viele zusammen, wie Sie verwenden wollen.

Als Ausdruck someAssignableThing = someValue entspricht "zuweisen someValue bis someAssignableThing und bewerten Sie den Wert someValue".

So die Aussage:

a = b = c = d = e = 5; 

den Wert zuweisen würde 5-a, b, c, d und e.

Es ist ein Syntaxfehler, etwas auf der linken Seite des = zu haben, dem kein Wert zugewiesen werden kann, und deshalb erhalten Sie einen Fehler im zweiten Fall (Sie können 5 keinen Wert zuweisen).

Verwandte Themen