2009-09-20 5 views
31

Ho iniziato a utilizzare JSLint. Ho controllato il mio codice e ho ricevuto questi errori:Soluzione per errori JSLint

Problema alla riga 92 carattere 7: Spostare l'invocazione nei paren che contengono la funzione.
})();

Problema alla riga 92 carattere 7: Avvolgere l'intera chiamata di funzione immediata in parentesi.
})();

come riparare questo errore?

+6

Sarebbe di aiuto se sappiamo cosa è alla riga 92 (almeno). – Thiyagaraj

+9

Solo andando a fare una pugnalata al buio e indovina è '})();' ;-) – travis

risposta

59

Credo che questo significa che si dovrebbe spostare la funzione di chiamata parentesi all'interno della confezione parens

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

I due ultimi parentesi che eseguono la funzione sono il problema. Questo è il modo JSLint vuole farlo sembrare come:

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

Questo è strano. Normalmente la convenzione avvolge tutto prima dell'ultima invocazione paren - '(function() {})()'. – kangax

+4

Bene, da quando jslint ha senso? ;) Personalmente, ignoro le regole che non hanno senso, come questo. –

+14

"da quando jslint ha un senso compiuto?", So che è stato fatto per scherzo, ma ogni regola che crockford ha messo lì ha una lunga giustificazione. Si potrebbe dire che molte delle regole non sono molto importanti, ma le regole, almeno, hanno una solida giustificazione. –

35

ho trovato una buona spiegazione qui: http://james.padolsey.com/javascript/closures-in-javascript/

La prima serie di parentesi (intorno "function(){}") non è necessario, ma è usato per rendere ovvio che la funzione è immediatamente invocata, rendendo così evidente che l'espressione non restituisce necessariamente tale funzione; ma invece il valore di ritorno di tale funzione

+1

Questo ha perfettamente senso, soprattutto quando è una grande funzione. Rende molto ovvio cosa sta succedendo - qualcosa che aiuta a leggere il codice scritto da un'altra persona, o il tuo codice dopo 3 mesi di non guardarlo. Il codice, dopo tutto, viene letto molto più spesso di quanto non sia scritto. –

+3

In realtà, è necessario se il token 'function' è la prima cosa sulla linea. In caso contrario, si verifica un errore di sintassi, poiché viene considerato come una dichiarazione di funzione anziché un'espressione. – scribu

+4

Sono passati più di due anni da quando è stato pubblicato, ma ritengo opportuno sottolineare che, se segui il link, scoprirai che il codice descritto nella citazione sopra utilizza parentesi nel modo in cui lancia gli avvisi JSLint, per esempio (funzione() {})(); – Frankie