JSLint: wurde verwendet, bevor es definiert wurde

95

Hallo, ich habe die 3 Javascript-Dateien.

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

In file1.js habe ich

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

Ich erhalte die Fehlermeldung 'jQuery' wurde verwendet, bevor es definiert wurde. und 'document' wurde verwendet, bevor es definiert wurde.

Wie kann ich diese Warnung sicher loswerden?

Wenn ich mache

var document = document || {}; 

Wenn es dann in meiner Utility.js verwendet wird, ist es im IE null und in Firefox in Ordnung.

Was ist die beste Lösung dafür?

Chun ping Wang
quelle
Mögliches Duplikat von JS Lint: 'Verknüpfung' wurde verwendet, bevor es definiert wurde . Stellen Sie außerdem sicher, dass in den Optionen " Browser annehmen" ausgewählt ist.
Andy E
@ChunpingWang Es wurde festgestellt, dass Sie noch auf SO aktiv waren und dieser Frage eine akzeptierte Antwort fehlte. Fehlt einer dieser Antworten etwas, das benötigt wird, um sie akzeptabel zu machen? Scheint, als würde Quentins Antwort das Problem wie gewünscht lösen. Benötigen Sie zusätzliche Informationen, um Ihre Frage zu beantworten?
Ruffin

Antworten:

169

Aus der Dokumentation

JSLint erkennt auch eine / * globale * / Direktive, die JSLint anzeigen kann, dass die in dieser Datei verwendeten Variablen in anderen Dateien definiert wurden. Der Kommentar kann eine durch Kommas getrennte Liste von Namen enthalten. Auf jeden Namen kann optional ein Doppelpunkt und entweder true oder false folgen, wobei true angibt, dass die Variable von dieser Datei zugewiesen werden kann, und false angibt, dass die Zuweisung nicht zulässig ist (dies ist die Standardeinstellung). Die Richtlinie respektiert den Funktionsumfang.

Einige Globals können für Sie vordefiniert werden. Wählen Sie die Option Browser annehmen (Browser) aus, um die globalen Standardeigenschaften vorab zu definieren, die von Webbrowsern bereitgestellt werden, z. B. document und addEventListener.

Beispiel:

/*jslint browser: true*/
/*global $, jQuery*/
QUentin
quelle
25
Hinweis: Sie können kein Leerzeichen einfügen global, /* global var, var2 */funktioniert also nicht. /*global var, var2*/Werke
Radixhound
4
Plural ist äquivalent und funktioniert auch: /*globals */und macht auch mehr Sinn, wenn eine Liste von Variablen hinzugefügt wird
Robert Koritnik
2
Die Lösung für JSLint, sich über etwas zu beschweren, das in all Ihren Dateien fehlt, besteht darin, allen Ihren Dateien eine Zeile hinzuzufügen ... Dies ist ein schrecklicher Rat.
Cerin
@Cerin - Nein, die Lösung für JSLint, die sich darüber beschwert, dass Sie eine Variable verwenden, für die keine Definition gefunden werden kann, besteht darin, ihr mitzuteilen, dass Sie sie in einer anderen Datei definiert haben (anstatt beispielsweise einen Tippfehler im Variablennamen zu machen das wird dein Programm später brechen).
Quentin
1
@Quentin, Ja, und Ihr Fix dafür erfordert, dass Sie in jeder einzelnen Datei "über jQuery erzählen". Das ist eine enorme Menge an Arbeit für etwas, das keinen Nutzen bringt. Sie können diese Prüfung auch einfach in JSLint deaktivieren.
Cerin
30

Wie Quentin sagt, gibt es eine /*global*/Richtlinie.

Hier ist ein Beispiel (setzen Sie dieses oben in die Datei):

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

Stellen Sie sicher, dass sich die anfängliche globale Anweisung in derselben Zeile befindet wie /*, da sie sonst unterbrochen wird.

Stanton
quelle