web-dev-qa-db-fra.com

JSLint: utilisation d'une fonction avant sa définition d'erreur

J'utilise JSLint pour vérifier la plupart de mes fichiers Javascript externes, mais le plus grand nombre d'erreurs que j'obtiens provient des fonctions utilisées avant leur définition.

Est-ce vraiment un problème dont je dois m'inquiéter?

Il semble que Firefox, IE7 et Chrome ne s'en soucient pas. Des fonctions telles que la populaire init() (que j'utilise souvent) collent normalement en haut, car cela a du sens pour moi ( J'aime prétendre que c'est analogue à main()), selon JSLint, devra être poussé vers le bas du fichier.

71
Chris S

Comme il s'agit du hit google le mieux noté et que d'autres personnes ne le voient peut-être pas au début dans l'outil jslint, il existe une option appelée "Tolérer les définitions mal ordonnées" qui vous permet de masquer ce type d'erreur.

/*jslint latedef:false*/
84
kontur

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

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

Exemple d'utilisation:

/* jshint latedef:nofunc */

noop();

function noop() {}

J'espère que cela t'aides.

33
Jan Molak

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

Voici un exemple (mettez ceci 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 qu'il soit recommandé d'après ce que j'ai lu sur le site.

Assurez-vous que l'instruction globale initiale est sur la même ligne que /*, ou bien ça casse.

11
stanton

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

{
   "latedef": false
}
2
Dmitri Zaitsev

Dans ton .jshintrc fichier, définissez:

  "latedef": "nofunc",
2
mooses

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'est-à-dire

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.

1
kofifus

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

par exemple: var init;

.... mais alors vous devrez supprimer le "var" lorsque vous arriverez à la vraie définition plus bas:

init = function () {};

0
jcsubmit