2011-12-14 9 views
20

Znalazłem następującą próbkę js i jestem zdezorientowany przez składnię. Zwróć uwagę, że instrukcje są rozdzielane przecinkami zamiast średnikami. Czy przecinki są prawidłowym separatorem zdań w js? Nie widziałem tego wcześniej.Separator instrukcji JS z przecinkami

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

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

      this.onblur = function() { 
      }, 

      this.onfocus = function() { 
      }, 

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

Odpowiedz

18

Przecinki pełnią rolę separatora między wyrażeniami w pojedynczej instrukcji wyrażenia. W związku z tym (jeśli zostało ono zakończone zamiast odcięcia po funkcji "onkeyup") jest tylko pojedynczą instrukcją wyrażenia.

Naprawdę nie ma powodu, aby kodować w ten sposób, lub nie ma naprawdę dobrego powodu, przynajmniej. W tym konkretnym przypadku ma on zasadniczo ten sam skutek, co seria oddzielnych instrukcji wyrażenia oddzielonych średnikami.

„użytkownik” przecinek jest wątpliwa w wielu przypadkach, a czasami użyteczna:

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

np. Pozwala na upuszczenie więcej niż jednego wyrażenia (zwykle przydziałów) w grammatical locale, które pozwala na jedno wyrażenie. To naprawdę jest oznaka słabości syntaktycznej, według mnie.

+4

Uwaga: Jeśli ktokolwiek jest zainteresowany operatorem przecinania - zobacz [to] (http://javascriptweblog.wordpress.com/2011/04/04/the-javascript-comma-operator/). – kubetz

+2

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

+1

@ dzejkej Świetna strona do nauki niuansów JS! Styl przypomina mi stare książki z serii C Primer i C++ Primer Plus. –

9

Każde przypisanie jest w rzeczywistości wyrażeniem (a nie instrukcją); wyrażenia mogą być łączone w większą ekspresję, której ostateczną wartością jest po prostu wartość ostatniej podekspresji; na przykład

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

Mimo że kod, który pokazałeś jest ważny, nie sądzę, że jest to dobry wzór do naśladowania. Zmieniłbym go na średniki.