2016-04-19 6 views
-2

Hier ist ein Beispiel von Redux.js Ich bin auf Github Reding. Kann jemand bitte die hier verwendete Syntax erklären?Welche JavaScript-Syntax ist das?

var currentListeners = [] 
var nextListeners = currentListeners 

.... 
someFunc() { 

// THIS: 
var listeners = currentListeners = nextListeners 
for (var i = 0; i < listeners.length; i++) { 
    listeners[i]() 
} 
..... 
} 

Sind die Mehrfachzuweisung und für Anweisungen unabhängig? Das würde es erklären. Aber was ist das fehlende Semikolon am Ende der Aufgabe? gute Praxis/schlechte Praxis?

+5

Uhm, ist das nicht nur normales altes javascript, geschrieben von jemandem, der eine kaputte Tastatur hatte * (fehlende Semikola) * – adeneo

+0

Alle 3 sind gleich gesetzt, zu nextListeners glaube ich. –

+1

Wir empfehlen Ihnen dringend, sich die [Grundlagen der Zuweisungen bei MDN] (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Assignment_Operators#Assignment_2) anzusehen. –

Antwort

0
var listeners = currentListeners = nextListeners 

ist die gleiche Sache wie dies tun:

var currentListeners = nextListeners; 
var listeners = currentListeners; 

this helps

+1

Technisch nein, 'currentListeners' ist im aktuellen Umfang nicht deklariert. –

+0

danke; aber die Mehrfachvergabe ist kein Problem. Der Mangel an Semikolon zwischen Assign- und For-Statements ließ mich fragen, ob ein ES6/7-Feature bei der Arbeit ist. Aus der Ferne erklärt das Fehlen von Semikolons es klar und jetzt bin ich peinlich berührt. – user3213604

+0

@ user3213604 Das Fehlen von Semikolons macht keinen Unterschied zum Verhalten dieses Codes. –

3

Der Zuweisungsoperator wertet, was auch immer zugewiesen wurde (effektiv der rechte Operand). Als Nebeneffekt aktualisiert es den Wert des linken Operanden. Also ordnet a = b = c den Wert von c in b zu, wertet c aus und ordnet dann den Wert von c in a zu und berechnet zu c.

Zuordnung ist rechtsassoziativ - es gruppiert von rechts nach links.

Weitere Semikolons zwischen Anweisungen sind [semi-]optional, wenn jede Anweisung in einer eigenen Zeile ist (hier fehlen einige Details, die in der Verknüpfung behandelt werden).

Schließlich ist hier eine interessante Sache die Zuweisung zu einer Variablen, die als ein Bereich deklariert ist. Funktionen in Javascript sind eine Möglichkeit, einen neuen Bereich zu deklarieren. Beachten Sie, dass die Funktion, die gerade in Ihrem Snippet definiert wird, erst nach ihrem Aufruf Auswirkungen auf den Wert currentListeners hat.