2011-12-14 29 views
20

Ho trovato il seguente campione js e sono confuso dalla sintassi. Si noti che le istruzioni sono separate da virgole anziché da punti e virgola. Le virgole sono un separatore di istruzioni valido in js? Non l'ho mai visto prima.Separatore di istruzioni JS con le virgole

$('selector').each(function() { 

      this.onclick = function() { 
       this.select(); 
      }, 

      this.onblur = function() { 
      }, 

      this.onfocus = function() { 
      }, 

      this.onkeyup = function() { 
      } 
    }); 

risposta

18

Le virgole fungono da separatore tra espressioni in una singola espressione. Quindi, questo (se fosse stato completato invece di essere interrotto dopo la funzione "onkeyup") è solo una singola espressione.

Non c'è davvero alcun motivo per codificare in questo modo, o almeno una buona ragione. In questo caso particolare ha essenzialmente lo stesso effetto di una serie di istruzioni di espressione separate separate da punto e virgola.

Il "operatore" virgola è discutibile in molti casi, ma a volte utile:

var index, len; 
for (index = 0, len = list.length; index < len; ++index) { ... } 

per esempio. Permette di far cadere più di una espressione (assegnazioni di solito) in un locale grammaticale che consente solo un'espressione. È davvero un segno di debolezza sintattica, secondo me.

+4

Nota: se qualcuno è interessato agli operatori virgola, consultare [questo] (http://javascriptweblog.wordpress.com/2011/04/04/the-javascript-comma-operator/). – kubetz

+2

Specifica: http://ecma262-5.com/ELS5_HTML.htm#Section_11.14 –

+1

@dzejkej Ottimo sito per l'apprendimento delle sfumature JS! Lo stile mi ricorda i vecchi libri C Primer e C++ Primer Plus nel corso della giornata. –

9

Ogni assegnazione è in realtà un'espressione (non un'istruzione); e le espressioni possono essere concatenate in un'espressione più grande, il cui valore finale è semplicemente il valore dell'ultima sottoespressione; per esempio.

alert( (w=1+1, x=2+3, y=3+3, z=4+4) ); // shows 8 

Sebbene il codice che hai mostrato sia valido, non penso che sia un buon modello da seguire. Lo cambierei in punto e virgola.

Problemi correlati