Come definire più variabili su una singola riga?

Leggendo la documentazione online, mi sto confondendo su come definire correttamente più variabili JavaScript su una singola riga.

Se voglio condensare il seguente codice, qual è il corretto metodo “rigoroso” di JavaScript per definire più variabili javascript su una singola riga?

var a = 0; var b = 0; 

È:

 var a = b = 0; 

o

 var a = var b = 0; 

eccetera…

Vuoi fare affidamento su virgole perché se ti affidi al costrutto di assegnamento multiplo, ti sparerai in un punto o nell’altro.

Un esempio potrebbe essere:

 >>> var a = b = c = []; >>> c.push(1) [1] >>> a [1] 

Si riferiscono tutti allo stesso object in memoria, non sono “unici” poiché ogni volta che si fa riferimento a un object (array, object letterale, funzione) viene passato per riferimento e non per valore. Quindi, se cambi solo una di queste variabili e vuoi che agiscano individualmente, non otterrai ciò che desideri perché non sono oggetti singoli.

C’è anche un lato negativo nell’assegnazione multipla, nel senso che le variabili secondarie diventano globali e non si vuole perdere nel namespace globale.

 (function() { var a = global = 5 })(); alert(window.global) // 5 

È meglio usare solo le virgole e preferibilmente con un sacco di spazi vuoti, quindi è leggibile:

 var a = 5 , b = 2 , c = 3 , d = {} , e = []; 

Non c’è modo di farlo in una riga con assegnazione come valore.

 var a = b = 0; 

rende b globale. Un modo corretto (senza perdite di variabili) è leggermente più lungo:

 var a = 0, b = a; 

Utilizzando l’es6 o il nodo di Javascript, puoi fare quanto segue:

 var [a,b,c,d] = [0,1,2,3] 

E se vuoi stampare facilmente più variabili in una singola riga, fai semplicemente questo:

 console.log(a, b, c, d) 

0 1 2 3

Questo è simile alla risposta di @alex gray qui, ma questo esempio è in Javascript invece di CoffeeScript.

Perché non farlo in due righe?

 var a, b, c, d; //All in the same scope a = b = c = d = 1; // Set value to all. 

Il motivo per cui, è quello di preservare l’ambito locale sulle dichiarazioni variabili, in questo modo:

 var a = b = c = d = 1; 

condurrà alle dichiarazioni implicite di b , c , d sull’ambito della finestra.

nota che puoi farlo solo con numeri e stringhe

potresti fare …

 var a, b, c; a = b = c = 0; //but why? c++; // c = 1, b = 0, a = 0;