2012-03-25 32 views
6

Come gdoron sottolineato,In che modo [b] [b = a, 0] scambia tra a e b?

var a = "a"; 
var b = "b"; 

a = [b][b = a,0]; 

cambierà a e b, e anche se sembra un po 'di hacky, che ha innescato la mia curiosità e sono molto curioso di come funziona. Non ha alcun senso per me.

+2

_ "un po 'di hacky" _ ??? un sacco di hacky ... :-) – gdoron

+0

Rilevante: [Qual è un modo migliore per scambiare due valori argomento?] (http://stackoverflow.com/questions/8482402/whats-a-better-way-to-swap- valori a due argomenti) –

+0

Non avrebbe avuto più senso commentare l'altra risposta di Godron e chiedere chiarimenti nella domanda iniziale? –

risposta

7
var a = "a"; 
var b = "b"; 

a = [b][b = a, 0]; 

Rompiamo l'ultima riga in pezzi:

[b]  // Puts b in an array - a safe place for the swap. 
[b = a] // Assign a in b 
[b = a,0] // Assign a in b and return the later expression - 0 with the comma operator. 

così alla fine è a =[b][0] - il primo oggetto nella matrice [b] =>b assegnato a a

Live DEMO

leggi @am non sono un commento in questa domanda:
When is the comma operator useful?
E 'il suo codice ...

+0

Quindi quando 'b' è inserito nell'array, è sicuro? –

+1

@Derek. Non andrà perso quando 'b = a' – gdoron

1

Potrebbe aiutare (o ostacolare) a pensarci bene termini della costruzione lambda semanticamente equivalenti (qui, il parametro c prende il posto di elemento 0):

a = (function(c) { b = a; return c; })(b); 
Problemi correlati