JSLint: a été utilisé avant d'être défini

95

Salut, j'ai les 3 fichiers javascript.

  • jquery.js
  • Utility.js
  • file1.js

Dans file1.js j'ai

jQuery.noConflict()
jQuery(document).ready(function($) { 
 // ....
});

J'obtiens une erreur «jQuery» a été utilisée avant sa définition. et «document» a été utilisé avant d'être défini.

Comment puis-je me débarrasser de cet avertissement en toute sécurité.

Si je fais

var document = document || {}; 

puis dans mon utilitaire.js s'il est utilisé, il serait nul dans IE et ok dans Firefox.

Quelle est la meilleure solution à cela?

Chun ping Wang
la source
duplication possible de JS Lint: «raccourci» a été utilisé avant sa définition . Assurez-vous également que le navigateur Assume est sélectionné dans les options.
Andy E
@ChunpingWang Vous avez remarqué que vous étiez toujours actif sur SO et qu'il manquait une réponse acceptée à cette question. L'une de ces réponses manque-t-elle quelque chose qui est nécessaire pour les rendre acceptables? On dirait que la réponse de Quentin résoudrait le problème comme demandé. Des informations supplémentaires nécessaires pour répondre à votre question?
ruffin

Réponses:

169

De la documentation

JSLint reconnaît également une directive / * global * / qui peut indiquer à JSLint que les variables utilisées dans ce fichier ont été définies dans d'autres fichiers. Le commentaire peut contenir une liste de noms séparés par des virgules. Chaque nom peut éventuellement être suivi de deux points et soit vrai ou faux, vrai indiquant que la variable peut être affectée par ce fichier, et faux indiquant que l'affectation n'est pas autorisée (ce qui est la valeur par défaut). La directive respecte la portée de la fonction.

Certains globaux peuvent être prédéfinis pour vous. Sélectionnez l'option Assumer un navigateur (navigateur) pour prédéfinir les propriétés globales standard fournies par les navigateurs Web, telles que document et addEventListener.

Exemple:

/*jslint browser: true*/
/*global $, jQuery*/
Quentin
la source
25
Remarque: vous ne pouvez pas mettre d'espace avant globaldonc /* global var, var2 */ne fonctionne pas. /*global var, var2*/works
radixhound
4
Le pluriel est équivalent et fonctionne aussi: /*globals */et a également plus de sens lors de l'ajout d'une liste de variables
Robert Koritnik
2
Donc la solution à JSLint de se plaindre de quelque chose qui manque dans tous vos fichiers est d'ajouter une ligne à tous vos fichiers ... C'est un conseil terrible.
Cerin
@Cerin - Non, la solution à JSLint se plaignant de l'utilisation d'une variable pour laquelle il ne trouve pas de définition est de lui dire que vous l'avez définie dans un autre fichier (par opposition, par exemple, à faire une faute de frappe dans le nom de la variable qui interrompra votre programme plus tard).
Quentin
1
@Quentin, Oui, et votre solution pour cela nécessite que vous "lui parliez de jQuery" dans chaque fichier. C'est une énorme quantité de travail pour quelque chose qui n'apporte aucun avantage. Vous pouvez aussi simplement désactiver cette vérification dans JSLint.
Cerin
30

Comme le dit Quentin, il y a une /*global*/directive.

Voici un exemple (mettez ceci en haut du fichier):

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

Assurez-vous que l'instruction globale initiale est sur la même ligne que /*, sinon elle s'arrête.

stanton
la source