2012-08-15 34 views
16

Possible Duplicate:
JavaScript: When should I use a semicolon after curly braces?¿Necesitamos un punto y coma después de la declaración de la función?

Alguien ha agregado punto y coma después de la declaración de la función, pero alguien no. ¿Es una buena práctica agregar punto y coma después de la declaración de la función?

function test(o) { 
} 

function test(o) { 
}; 
+3

Esto podría ser relevante: [en caso de que var multiline f = function() {/ * Code * /} obtenga un punto y coma] (http://stackoverflow.com/q/4515084/990877). Para resumir: cierre con ';' al declarar la función en una expresión de asignación (es decir, 'var f = function() {}'). – PPvG

Respuesta

28

Una función declaración no necesita (y no debería tener) un punto y coma después de que:

function test(o) { 
} 

Sin embargo, si se escribe una función como una declaración, al igual que el inicializador de variable de abajo, y luego la declaración debe terminar con un punto y coma, al igual que cualquier otra declaración sería:

var a = function test(o) { 
}; 
3

No es necesario un punto y coma en la definición de una función de esa manera.

Sin embargo, si se define una función como esta:

var test = function (o) { 
} 

No es estrictamente necesario, pero es posible que desee utilizarlos, especialmente si se pone la función en una línea.

La primera forma define una función, pero la segunda forma asigna una función a una variable, y por lo tanto es una declaración. La mayoría de las declaraciones están delimitadas por punto y coma. Definir funciones podría considerarse un contraejemplo común, ya que no muchas personas las usan.

2

punto y coma y declaraciones de función:

function test(o) { 
    // body 
} // semicolon no 

var test = function (o) { 
    // body 
}; // semicolon yes 

Consulte JSLint para preguntas sobre el código de formato.

+0

El punto y coma no se requiere en el segundo tipo de declaración de función también. El código después de que se ejecuta sin ningún problema. –

1

Para el navegador, no importa. Para la cuestión de la semántica, solo importa si estás creando un prototipo de una función o usando la declaración de la función.

function stuff(stuff) { 
    alert(stuff); 
} //don't need a semicolon 

Object.prototype.stuff = function(stuff) { 
    alert(stuff); 
}; //need a semicolon 
var stuff = function(stuff) { 
    alert(stuff); 
}; //need a semicolon 
0

El punto y coma no es necesario para definir una función, pero ponerlo tampoco es un error.

Una excepción, sin embargo, si se utiliza envoltorios de función y pasar los parámetros, necesidad para añadir un punto y coma en el medio, ejemplo:

(function(v){alert(v)})('1'); 
(function(s){alert(s)})('0') 

... Otherwise forget about them ...

6

¿Qué está pasando realmente? re es que está agregando una declaración vacía después de la función.

function test (o) { return o; }; 

podría ser visto como algo similar a:

var test = 0;; 

Ese segundo punto y coma no es un error per se . El navegador lo trata como una declaración donde no pasó absolutamente nada.

Aquí hay dos cosas a tener en cuenta.

Esto se aplica SOLO a la función de las declaraciones y de control de bloques (de/si/mientras/interruptor/etc).

función declaraciones deben definirse en la parte inferior de su alcance, por lo que no se enfrenten a problemas como éste:

function test() {} 
(function (window, document, undefined) { /* do stuff */ }(window, document)); 

Debido a que el navegador va a suponer que quieres decir function test() {}(/*return value of closure*/); cual es un error. Un error muy malo y desagradable que es muy fácil pasar por alto.

Pero está bien, porque las declaraciones de funciones pueden ir en declaraciones de devolución y aún funcionan bien.

Así que incluso si quería ir:

function doStuff() { 
    return (function() { /*process stuff*/ test(); }()); 
    function test() {} 
} 

que va a trabajar solo color de rosa.

Cuestiones relacionadas