77 votes

Erreur JSLint : Déplacer toutes les déclarations 'var' en haut de la fonction

Le site JSLint a été mis à jour, et je ne peux plus vérifier les scripts JS. Pour moi, cet avertissement n'est pas critique, et je ne veux pas passer par des milliers de lignes pour le corriger, je veux trouver des problèmes plus critiques.

Quelqu'un sait-il comment désactiver cette erreur, ou utiliser l'ancien JSLint ?

UPDATE

Exemple :

function doSomethingWithNodes(nodes){
  this.doSomething();

  for (var i = 0; i < nodes.length; ++i){
    this.doSomethingElse(nodes[i]);
  }

  doSomething(); // want to find this problem
}

Sortie de jslint.com :

Error:
Problem at line 4 character 8: Move all 'var' declarations to the top of the function.

for (var i = 0; i < nodes.length; ++i){

Problem at line 4 character 8: Stopping, unable to continue. (44% scanned).

Problème :

Avoir des variables en plus des fonctions est une nouvelle exigence. Je ne peux pas utiliser JSLINT pour tester le code, car il arrête de scanner script sur cette erreur.

J'ai beaucoup de code, et je ne veux pas menacer cet avertissement comme une erreur critique.

MISE À JOUR 8/22/2011 : trouvé http://jshint.com il est bien meilleur que http://jslint.com/

0 votes

Pouvez-vous clarifier votre question. Vous répondez en fait à deux questions ?

1 votes

Est-ce qu'il s'arrête toujours à la première erreur si vous décochez la case Stop on first error ?

0 votes

Ce site fera un meilleur travail -> glat.info/jscheck

151voto

Lee Kowalkowski Points 6278

Mise à jour : juin 2017 : Sous réserve de la prise en charge (par exemple, si vous n'exécutez pas JavaScript dans Internet Explorer 10 ou inférieur), vous devriez envisager l'utilisation de l'option let au lieu de var .

Par exemple : for(let i=0; ...; i++)


Il n'y a pas moyen que je mette var i; d'un for(var i=0; ...; i++) au sommet de mes fonctions. Surtout quand La spécification JavaScript le considère comme une syntaxe acceptable dans le for (12.6). De plus, c'est la syntaxe Brendan Eich utilise dans ses exemples.

L'idée de déplacer la déclaration vers le haut est qu'elle est censée refléter plus fidèlement ce qui se passe sous le capot, mais cela ne fait que refléter, sans affecter.

Pour moi, c'est une attente ridicule pour for itérations. D'autant plus que JSLint arrête le traitement lorsqu'il le détecte.

On peut se demander si le fait de déclarer les variables au début d'une fonction est plus lisible. Personnellement, je préfère que les variables d'itérateur soient déclarées lorsqu'elles sont utilisées. Je me moque de savoir si la variable est déjà créée en interne, je l'initialise ici, donc je suis tranquille.

Je dirais que déclarer une variable d'itérateur à l'endroit où elle est utilisée permet d'éviter qu'elle ne devienne accidentellement globale (si vous déplacez la boucle dans une autre fonction, la variable d'itérateur se déplace avec elle). C'est beaucoup plus facile à maintenir que d'avoir à maintenir des déclarations de variables au sommet des fonctions.

Pour l'instant, j'utilise http://www.javascriptlint.com/online_lint.php parce qu'il semble se concentrer sur les choses importantes.

12 votes

Vous pouvez également consulter JSHint, qui a été créé en partie en réponse à ce genre de choses dans JSLint. Et voyez cette discussion : stackoverflow.com/questions/6803305/

0 votes

Si vous ne vous intéressez qu'aux questions de syntaxe et pas tellement au style, le compilateur de fermeture de Google fait l'affaire : closure-compiler.appspot.com/home - détails chez : développeurs.google.com/fermeture - Ils ont aussi un linter téléchargeable, mais je ne l'ai pas utilisé.

1 votes

Merci d'avoir indiqué javascriptlint.com/online_lint.php . J'avais utilisé JSLint, mais il est difficile de se frayer un chemin à travers tout le radotage inutile sur des erreurs qui ne sont même pas des erreurs sur JSLint.

7voto

jjrv Points 2390

Le compilateur Closure de Google ne parvient pas à détecter correctement le type de la variable de boucle d'une boucle for...in à moins qu'elle ne soit déclarée comme for (var i in ...) et aucune annotation ne semble corriger cela, de sorte que la déclaration ne peut pas être déplacée vers le haut.

0 votes

Oh vraiment ? ! C'est dommage, mais vraiment utile à partager, +1.

0 votes

@jjrv avez-vous un exemple de code qui ne fonctionne pas avec le compilateur de fermeture ? Je l'utilise et je n'ai vu aucun problème.

0 votes

@JavaKungFu le symptôme était que le compilateur rapporte moins de 100% de code typé et affiche un avertissement si vous définissez reportUnknownTypes = CheckLevel.WARNING dans CompilerOptions.java.

5voto

Pumbaa80 Points 27066

Vous pouvez télécharger anciennes versions à tout moment, ou modifier le nouvelle version . Ce n'est pas si difficile, vraiment (recherchez move_var ). Ensuite, exécutez jslint localement, soit en utilisant node, soit en utilisant un navigateur avec un simple formulaire HTML - vous voudrez peut-être copier l'original de Crockford.

Il convient de noter que l'avertissement a été introduit dans le cadre d'une initiative de l réécriture majeure et ne se produit qu'après for( Le message est donc un peu trompeur.

4voto

Paul Beusterien Points 8051

Notez que déplacer toutes les variables vers le haut est différent de "autoriser une déclaration var par fonction". L'exigence de déplacer toutes les variables vers le haut est nouvelle et ne semble pas avoir de commutateur. Pour en savoir plus http://groups.google.com/group/jsmentors/browse_thread/thread/5e90c25230f8e22/70e1a95a20fb829e

3voto

J'ai eu ce problème sur ma base de code, lorsque nous avons voulu passer à la dernière version de JSLINT. Nous en avions beaucoup et les gens n'étaient pas contents de déplacer la déclaration. En fait, nous avons trouvé que la solution la plus élégante était d'utiliser underscore.js et, au lieu d'avoir la boucle verbeuse complète, d'utiliser la fonction _.each(), ce qui a supprimé l'erreur JSLint et a rendu notre code plus fonctionnel, plus propre, plus serré et plus facile à lire.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X