2011-08-02 13 views
6

Ejecuté un script a través de JSLint y detectó un problema específico con la colocación de paréntesis.¿Cómo deben formatearse los cierres?

que había escrito:

(function(){})(); 

y se sugirió utilizar:

(function(){}()); 

Soy curioso en cuanto a lo que los errores o problemas corrige este cambio en particular. Supongo que porque JSLint lo eligió como un problema, debe ser ser un problema para alguien.

formas expandidas:

(
    function (p) { 
    ...code... 
    } 
)(param); //parameters after the parens 

web frente a

(
    function (p) { 
    ...code... 
    }(param) //parameters within the parens 
); 
+2

http://stackoverflow.com/questions/5938802/are-function-and-function-functionally-equal-in/5938845#5938845 – SLaks

+0

@zzzzBov Wow, claramente no leyó nada más allá de la primera frase de la responde que SLaks vinculado a. Contiene un desglose extremadamente detallado de las diferencias entre las dos sintaxis que responde exactamente a su pregunta. –

Respuesta

5

La cuestión específica JSLint está tratando de arreglar refiere a una falta de cierre ; que puede causar un error en una función se interpreta como un argumento:

(function A(arg){ 
    // stuff 
}) 

(function B(){ 
    ... 
}); 

es perfectamente válido, B se pasa a A como arg. Sin embargo, a menudo este no es el caso previsto, ya que con frecuencia se pretende que sean autoejecutables y se olvidaron los siguientes (). La sintaxis sugerida elimina cualquier confusión que pueda haber olvidado accidentalmente para ejecutar su función como estaba previsto.

Por lo que vale, casi siempre uso siempre la primera sintaxis; hábito.

0

Según Crockford en http://www.yuiblog.com/crockford/ (no recuerdo cual de vídeo, pero creo que es hacia el principio) es puro estilo de ayuda a que sea más fácil de leer y no está relacionado con errores o problemas.

Editar:

creo que es en el acto III: La función de la última

Cuestiones relacionadas