2009-09-20 7 views
31

J'ai commencé à utiliser JSLint. J'ai vérifié mon code et j'obtiens ces erreurs:Solution pour les erreurs JSLint

Problème à la ligne 92 caractère 7: Déplacer l'invocation dans les parens qui contiennent la fonction.
})();

Problème à la ligne 92 caractère 7: Enveloppe l'invocation de fonction immédiate entière dans parens.
})();

Comment réparer cette erreur?

+6

Aiderait si nous savons ce qui est à la ligne 92 (au moins). – Thiyagaraj

+9

Je vais juste prendre un coup dans le noir et deviner que c'est}}(); ';-) – travis

Répondre

59

je crois que cela signifie que vous devez déplacer la fonction d'appel parens dans l'emballage parens

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

Les deux derniers parens qui exécutent la fonction sont le problème. Voici comment JSLint il veut ressembler à:

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

C'est étrange. La convention consiste généralement à tout emballer avant la dernière invocation parens - '(function() {})()'. – kangax

+4

Eh bien, depuis quand jslint a-t-il un sens complet? ;) Personnellement, j'ignore les règles qui n'ont pas de sens, comme celle-ci. –

+14

"Depuis quand jslint a-t-il un sens complet?", Je sais que cela a été fait en plaisantant, mais chaque règle que Crockford a mise là-bas a une longue justification. On pourrait dire que beaucoup de règles ne sont pas très importantes, mais les règles, au moins, ont une justification solide. –

35

J'ai trouvé une bonne explication ici: http://james.padolsey.com/javascript/closures-in-javascript/

La première série de parenthèses (autour de « function(){} ») n'est pas nécessaire mais est utilisé pour rendre évident que la fonction est invoquée immédiatement, ce qui rend évident que l'expression ne renvoie pas nécessairement cette fonction; mais à la place la valeur de retour de cette fonction

+1

Cela prend tout son sens, surtout quand c'est une grande fonction. Cela rend très évident ce qui se passe - quelque chose qui aide à lire le code écrit par une autre personne, ou votre propre code après 3 mois de ne pas le regarder. Le code, après tout, est lu beaucoup plus souvent qu'il n'est écrit. –

+3

En fait, il est requis si le jeton 'function' est la première chose sur la ligne. Sinon, vous obtenez une erreur de syntaxe, car elle est traitée comme une déclaration de fonction au lieu d'une expression. – scribu

+4

Cela fait plus de deux ans que cela a été posté, mais je pense que vous devriez remarquer que, si vous suivez le lien, vous trouverez que le code décrit dans la citation ci-dessus utilise des parenthèses dans la façon dont les avertissements JSLint par exemple (fonction() {})(); – Frankie

Questions connexes