¿Por qué debería usar un punto y coma después de cada función en JavaScript?

282

He visto que diferentes desarrolladores incluyen punto y coma después de las funciones en JavaScript y algunos no lo han hecho. ¿Cuál es la mejor práctica?

function weLikeSemiColons(arg) {
   // bunch of code
};

o

function unnecessary(arg) {
  // bunch of code
}
macca1
fuente

Respuestas:

424

Los punto y coma después de las declaraciones de funciones no son necesarios .

La gramática de a FunctionDeclarationse describe en la especificación como esta:

function Identifier ( FormalParameterListopt ) { FunctionBody }

No se requiere punto y coma gramaticalmente, pero podría preguntarse por qué.

Los punto y coma sirven para separar las declaraciones entre sí, y a FunctionDeclarationno es una declaración .

FunctionDeclarationsse evalúan antes de que el código entre en ejecución, izar es una palabra común que se usa para explicar este comportamiento.

Los términos "declaración de función" y "declaración de función" a menudo se usan incorrectamente de manera intercambiable, porque no hay una declaración de función descrita en la Especificación ECMAScript, sin embargo, hay algunas implementaciones que incluyen una declaración de función en su gramática, -notablemente Mozilla- pero nuevamente esto No es estándar.

Sin embargo, siempre se recomiendan los punto y coma donde se usa FunctionExpressions, por ejemplo:

var myFn = function () {
  //...
};

(function () {
  //...
})();

Si omite el punto y coma después de la primera función en el ejemplo anterior, obtendrá resultados completamente no deseados:

var myFn = function () {
  alert("Surprise!");
} // <-- No semicolon!

(function () {
  //...
})();

La primera función se ejecutará de inmediato, ya que los paréntesis que rodean a la segunda se interpretarán como los Argumentsde una llamada de función.

Clases recomendadas:

CMS
fuente
2
Editado para aclarar, ese artículo habla sobre expresiones de funciones
CMS
1
No estoy completamente familiarizado con ECMA, pero ese es el estándar que uso también. Buen post. La mayoría de los tuts que veo en línea y muestras de código que DL uso ese estándar, así que me acabo de adaptar.
regex
1
Parte de la confusión aquí puede estar influenciada por la falta de una buena palabra en inglés para "permitido porque será ignorado". Volvemos a decir "opcional", pero eso es engañoso ya que sugiere que no incluir un punto y coma después de una declaración cae en la misma categoría que no incluir un punto y coma después de una declaración. Este último es opcional en un sentido completamente diferente: allí es porque el analizador agregará el punto y coma que omitió , mientras que en este caso, es porque el analizador ignorará el punto y coma que incluyó . Para decirlo de otra manera: si uno es opcional, también lo son ocho .
Semicolon
El enlace "Expresiones de funciones nombradas desmitificadas" ahora enlaza a una url muerta, el archivo web tiene una copia aquí: web.archive.org/web/20100426173335/http://yura.thinkweb2.com/…
Tony
El último ejemplo es excelente. Omitir un punto y coma en este caso conduce a errores extremadamente extraños y difíciles de depurar. De todo corazón votando a favor.
Yan Yankowski
38

Los uso después de las declaraciones de función como variable:

var f = function() { ... };

pero no después de las definiciones de estilo clásico:

function f() {
    ...
}
Gabe Moothart
fuente
A NetBeans, así como a otros IDE, les gusta ver punto y coma después de una función como variable como this.animaton_fun = function () {...};
Lance Cleveland
66
Pero, para el interlocutor, ¿por qué ?
Lucas
Ayuda durante el paso de construcción. Cuando un script de uglifier ve un punto y coma, no necesita agregar un salto de línea al archivo de salida; si no lo hace, se generará un salto de línea y el archivo será un poco más grande.
autoboxer
20

JS Lint es una convención de facto, y dice que no hay punto y coma después del cuerpo de la función. Vea la sección "Punto y coma" .

David Hedlund
fuente
10
He sido testigo de primera mano de una función que falló debido a la falta de punto y coma. Estoy totalmente en desacuerdo con que dejarlo fuera es una convención. Si bien el 99,99% de las veces no se romperá, hay ciertas situaciones en las que he notado que IE no ha podido interpretar JavaScript sin el punto y coma.
MillsJROSS
8
Mi respuesta solo trata con definiciones de funciones como en los dos ejemplos de la pregunta. En estos casos, no se necesita un punto y coma final en ningún navegador, en ninguna situación. Supongo que podrías estar pensando en expresiones de funciones. Son un asunto completamente diferente, y no se abordó en la pregunta original.
David Hedlund el
var myFunction = function (arg) {console.log (arg); } (function () {console.log ('función completamente no relacionada'); devuelve 'mira lo que sucede';} ());
Maciej Krawczyk
@MillsJROSS Secundo la respuesta de David, y sería feliz si elaboraras el fracaso que encontraste. ¿Fue realmente una expresión de función o error de IE?
wlnirvana
7

¡Solo mantente constante! No son necesarios, pero los uso personalmente porque la mayoría de las técnicas de minificación dependen del punto y coma (por ejemplo, Packer ).

Josh Stodola
fuente
5

Realmente solo depende de tu preferencia. Me gusta terminar las líneas de código con punto y coma porque estoy acostumbrado a Java, C ++, C #, etc., así que uso los mismos estándares para codificar en JavaScript.

Sin embargo, normalmente no termino las declaraciones de función en punto y coma, pero esa es solo mi preferencia.

Los navegadores lo ejecutarán de cualquier manera, pero tal vez algún día se les ocurran algunos estándares más estrictos que lo rijan.

Ejemplo de código que escribiría:

function handleClickEvent(e)
{
     // comment
     var something = true;  // line of code
     if (something)  // code block
     {
        doSomething();  // function call
     }
}
regex
fuente
1
las líneas definitivamente deben terminar con punto y coma, aunque. de lo contrario un Minifier podría romper por completo la funcionalidad
David Hedlund
9
@david: en ese caso, el minificador está roto, ¿verdad?
DisgruntledGoat
Convenido. Es una forma natural de codificar para personas (como yo) procedentes de entornos C / C ++. También hace que el código sea más legible.
Anshuman Manral
3

En realidad, es más que una cuestión de convención o coherencia.

Estoy bastante seguro de que no colocar punto y coma después de cada declaración ralentiza el analizador interno porque tiene que averiguar dónde está el final de la declaración. Desearía tener algunos números útiles para que lo confirmes positivamente, pero tal vez puedas googlearlo tú mismo. :)

Además, cuando comprime o minimiza el código, la falta de punto y coma puede llevar a una versión reducida de su secuencia de comandos que no hace lo que desea porque todo el espacio en blanco desaparece.

Masón
fuente
3
La pregunta se orientó hacia si los puntos y comas tenían que ser después de las funciones, no todas las declaraciones. Estoy de acuerdo en que debe colocar punto y coma después de cada declaración, y he visto otro consenso de stackoverflow que dice lo mismo.
macca1
1
De acuerdo, y no poner punto y coma después de las funciones dará lugar a ese problema de minificación que mencioné. Buena suerte señor.
Mason
Votar porque reforzar el tema de la
minificación
1

Cuando minimicé mis scripts, me di cuenta de que necesitaba usar punto y coma para las funciones que comienzan con la marca igual. si define una función como var, sí, necesita usar punto y coma.

necesita punto y coma

var x = function(){};
var x = new function(){};
this.x = function(){};

no necesita punto y coma

function x(){}
senera
fuente
0

SENCILLO:

Es una buena práctica dejar los puntos y comas ;después del final de las llaves de función. Han sido considerados una mejor práctica durante años.

Una ventaja de usarlos siempre es si quieres minimizar tu JavaScript.

Como minimizar el Javascript, ayuda a reducir un poco el tamaño del archivo.

Pero en cuanto a las mejores prácticas y respuestas anteriores, no se recomienda usarlo después de una etiqueta de función.

Si NO usa punto y coma, y ​​si quiere minimizar (como a muchos desarrolladores les gusta hacer si su sitio tiene una gran cantidad de JavaScript), podría obtener todo tipo de Errores / Advertencias.

Shaze
fuente
0

el punto y coma después de una función no es necesario para usarla o no, no causa errores en su programa. sin embargo, si planea minificar su código, entonces es una buena idea usar punto y coma después de las funciones. digamos, por ejemplo, que tienes un código como el siguiente

//file one
var one=1;
var two=2;
function tryOne(){}
function trytwo(){}

y

//file two
var one=1;
var two=2;
function tryOne(){};
function trytwo(){};

cuando minimice ambos, obtendrá lo siguiente como salida

Tenga en cuenta que los comentarios son solo para ilustrar

//file one
var one=1;var two=2;function tryOne(){}
function trytwo(){}

y

//file two
var one=1;var two=2;function tryOne(){};function trytwo(){};
DilanTsasi
fuente