Question

J'utilise JSLint pour vérifier la plupart de mes fichiers Javascript externes, mais la plupart des erreurs que je reçois proviennent de fonctions utilisées avant leur définition.

Est-ce vraiment un problème qui me préoccupe ?

Il semble que Firefox, IE7 et Chrome ne s’y intéressent pas. Des fonctions comme le populaire init () (que j'utilise souvent) collent généralement au sommet car cela me semble logique (j'aime prétendre que c'est analogue à main () ). selon JSLint, il faudra pousser au bas du fichier.

Était-ce utile?

La solution

Si vous déclarez des fonctions à l'aide du mot clé function , vous pouvez les utiliser avant leur déclaration. Toutefois, si vous déclarez une fonction via une autre méthode (par exemple, en utilisant une expression de fonction ou le constructeur Function ), vous devez déclarer la fonction avant de l'utiliser. Voir cette page sur le Réseau de développeurs Mozilla pour plus d'informations.

En supposant que vous déclariez toutes vos fonctions avec le mot clé function , je pense que cela devient une question de style programmation. Personnellement, je préfère structurer mes fonctions de manière à sembler logique et à rendre le code le plus lisible possible. Par exemple, comme vous, je mettrais une fonction init en haut, car c'est à partir de là que tout commence.

Autres conseils

Comme il s'agit du hit Google le mieux noté et que d'autres personnes pourraient ne pas le voir au premier abord dans l'outil jslint, il existe une option intitulée "Tolérer les définitions erronées". cela vous permet de cacher ce type d'erreur.

/*jslint latedef:false*/

Si vous utilisez jshint, vous pouvez définir latedef sur nofunc , qui ignorera uniquement les définitions de fonction en retard.

Documentation - http://www.jshint.com/docs/options/#latedef

Exemple d'utilisation:

/* jshint latedef:nofunc */

noop();

function noop() {}

J'espère que cela vous aidera.

Sur le site Web de jslint ( http://www.jslint.com/lint.html ), vous pouvez en savoir plus sur une directive / * global * / qui vous permet de définir des variables supposées être déclarées ailleurs.

Voici un exemple (placez-le en haut du fichier):

/*global var1,var2,var3,var4,var5*/

Le: true: false n'est pas réellement nécessaire d'après mon expérience, mais il semble que cela soit recommandé d'après ce que j'ai lu sur le site.

Assurez-vous que l'instruction globale initiale se trouve sur la même ligne que / * , sinon elle se brise.

Pour désactiver cet avertissement dans jshint pour tous les fichiers, placez-le dans votre fichier .jshintrc :

{
   "latedef": false
}

Dans votre fichier .jshintrc , définissez:

  "latedef": "nofunc",

il est très regrettable que l’option Latedef ait été supprimée. Ceci est essentiel lorsque vous essayez de créer une «classe» avec une interface en haut, c.-à-d.

function SomeClass() {
   var self = this;
   self.func = func;

   function func {
      ...
   }
}

Ce style est très courant mais ne passe pas jsLint car func est "utilisé" avant d’être défini. Devoir utiliser global pour chaque fonction 'membre' est une douleur totale.

Vous pouvez toujours déclarer la fonction incriminée en haut

par exemple: var init;

.... mais vous devrez ensuite supprimer le " var " quand vous arrivez à la vraie définition plus bas:

init = function () { };

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top