Ich verwende JSLint, um die meisten meiner externen Javascript-Dateien zu überprüfen. Die meisten Fehler treten jedoch bei Funktionen auf, die verwendet werden, bevor sie definiert werden.
Ist das wirklich ein Problem, über das ich mir Sorgen machen sollte ?
Es scheint, dass Firefox, IE7 und Chrome sich nicht darum kümmern. Funktionen wie die populären init()
(die ich oft benutze) bleiben normalerweise oben, da dies für mich sinnvoll ist (ich tue gerne so, als wäre es analog zu main()
), müssen laut JSLint an den unteren Rand der Datei verschoben werden.
quelle
Da dies der am besten bewertete Google-Treffer ist und andere Personen ihn möglicherweise zuerst im jslint-Tool nicht sehen, gibt es eine Option namens "Fehlgeordnete Definitionen tolerieren", mit der Sie diese Art von Fehler ausblenden können.
/*jslint latedef:false*/
quelle
true
scheint dieses Problem für mich nicht zu "lösen".Wenn Sie jshint verwenden können Sie einstellen ,
latedef
aufnofunc
, die erst spät Funktionsdefinitionen ignoriert.Dokumentation - http://www.jshint.com/docs/options/#latedef
Anwendungsbeispiel:
/* jshint latedef:nofunc */ noop(); function noop() {}
Hoffe das hilft.
quelle
Auf der Website von jslint ( http://www.jslint.com/lint.html ) können Sie Informationen zu einer / * global * / -Direktive lesen, mit der Sie Variablen festlegen können, von denen angenommen wird, dass sie an anderer Stelle deklariert sind.
Hier ist ein Beispiel (setzen Sie dieses oben in die Datei):
/*global var1,var2,var3,var4,var5*/
Das: true: false wird aus meiner Erfahrung eigentlich nicht benötigt, aber es sieht so aus, als würde es von dem empfohlen, was ich auf der Website gelesen habe.
Stellen Sie sicher, dass sich die anfängliche globale Anweisung in derselben Zeile befindet wie
/*
, da sie sonst unterbrochen wird.quelle
Fügen Sie diese Warnung
jshint
in Ihre.jshintrc
Datei ein, um diese Warnung für alle Dateien zu deaktivieren :{ "latedef": false }
quelle
Stellen Sie in Ihrer
.jshintrc
Datei Folgendes ein:"latedef": "nofunc",
quelle
Es ist sehr bedauerlich, dass die Latedef-Option entfernt wurde. Dies ist wichtig, wenn Sie versuchen, eine 'Klasse' mit einer Schnittstelle oben zu erstellen, d. H.
function SomeClass() { var self = this; self.func = func; function func { ... } }
Dieser Stil ist sehr verbreitet, besteht jedoch nicht an jsLint, da func vor der Definition "verwendet" wird. Die Verwendung von global für jede 'Member'-Funktion ist ein totaler Schmerz.
quelle
Sie können die störende Funktion immer oben deklarieren
zB: var init;
.... aber dann musst du das "var" entfernen, wenn du weiter unten zur wahren Definition kommst:
init = function () {};
quelle
init = function(){}
ist nicht dasselbe wiefunction init() {}
ECMAScript hat unterschiedliche Regeln für anonyme Funktionen, das ist das erste.