2011-12-14 25 views
20

Encontré la siguiente muestra js y estoy confundido por la sintaxis. Observe que las declaraciones están separadas por comas en lugar de punto y coma. ¿Las comas son un separador de declaración válido en js? No he visto esto antes.separador de declaraciones JS con comas

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

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

      this.onblur = function() { 
      }, 

      this.onfocus = function() { 
      }, 

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

Respuesta

18

Comas actúan como un separador entre expresiones en una sola declaración de expresión. Por lo tanto, eso (si se completó en lugar de cortarse después de la función "onkeyup") es solo una declaración de expresión única.

No hay realmente ninguna razón para codificar así, o al menos no hay una razón realmente buena. En este caso particular, tiene esencialmente el mismo efecto que una serie de declaraciones de expresiones separadas separadas por punto y coma.

El "operador" coma es cuestionable en muchos casos, pero a veces útil:

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

por ejemplo. Le permite a uno soltar más de una expresión (asignaciones generalmente) en una configuración regional gramatical que permite solo una expresión. Realmente es un signo de debilidad sintáctica, en mi opinión.

+4

Nota: Si alguien está interesado en operadores de coma, consulte [this] (http://javascriptweblog.wordpress.com/2011/04/04/the-javascript-comma-operator/). – kubetz

+2

especificación: http://ecma262-5.com/ELS5_HTML.htm#Section_11.14 –

+1

@dzejkej Gran sitio para aprender los matices de JS! El estilo me recuerda a los viejos libros C Primer y C++ Primer Plus en el día. –

9

Cada asignación es en realidad una expresión (no una declaración); y las expresiones se pueden concatenar en una expresión más grande, cuyo valor final es simplemente el valor de la última sub-expresión; p.ej.

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

Aunque el código que mostró es válido, no creo que sea un buen patrón a seguir. Yo lo cambiaría a punto y coma.

Cuestiones relacionadas