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.
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*/
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.
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.
Pour désactiver cet avertissement dans jshint
pour tous les fichiers, placez-le dans votre .jshintrc
fichier:
{
"latedef": false
}
Dans ton .jshintrc
fichier, 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'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.
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 () {};