2009-09-20 24 views
31

Comencé a usar JSLint. Comprobé mi código y estoy obteniendo estos errores:Solución para errores JSLint

Problema en la línea 92 carácter 7: Mueva la invocación a los parens que contienen la función.
})();

Problema en la línea 92 carácter 7: Envuelve toda la invocación de función inmediata en parens.
})();

cómo solucionar este error?

+6

Ayudaría si supiéramos qué hay en la línea 92 (como mínimo). – Thiyagaraj

+9

Solo voy a apuñalar en la oscuridad y supongo que es '})();' ;-) – travis

Respuesta

59

Creo que esto significa que debe mover la función de llamada parens dentro de la envoltura parens

(function() { /* code */ })() 

Los dos últimos parens que ejecutan la función son el problema. Esta es la forma en JSLint quiere que se vea como:

(function() { /* code */ }()) 
+10

Eso es extraño. La convención es generalmente para envolver todo antes de la última invocación parens - '(function() {})()'. – kangax

+4

Bueno, ¿desde cuándo jslint tiene todo el sentido? ;) Personalmente, ignoro las reglas que no tienen sentido, como esta. –

+14

"¿Desde cuándo jslint tiene sentido completo?", Sé que fue hecho en broma, pero cada regla que pone Crockford allí tiene una larga justificación. Se podría decir que muchas de las reglas no son muy importantes, pero las reglas, al menos, tienen una sólida justificación. –

35

me pareció una buena explicación aquí: http://james.padolsey.com/javascript/closures-in-javascript/

El primer conjunto de paréntesis (en torno a "function(){}") no se requiere pero se utiliza para es obvio que la función se invoca inmediatamente, lo que hace obvio que la expresión no necesariamente devuelve esa función; pero en cambio el valor de retorno de esa función

+1

Esto tiene mucho sentido, especialmente cuando se trata de una gran función. Hace que sea muy obvio lo que está sucediendo, algo que ayuda al leer el código que escribió otra persona, o su propio código después de 3 meses sin mirarlo. Después de todo, el código se lee mucho más a menudo de lo que está escrito. –

+3

En realidad, se requiere si el token de 'función' es lo primero en la línea. De lo contrario, obtendrá un error de sintaxis, ya que se trata como una declaración de función, en lugar de una expresión. – scribu

+4

Han pasado más de dos años desde que se publicó esta publicación, pero creo que debería señalar que, si sigue el enlace, encontrará que el código que se describe en la cita anterior usa paréntesis en la forma en que arroja las advertencias de JSLint, p.ej (función() {})(); – Frankie