
Oleg Jaroschewitsch
Die JSLint-Site wurde aktualisiert und ich kann JS-Skripte nicht mehr überprüfen. Für mich ist diese Warnung nicht kritisch, und ich möchte nicht Tausende von Zeilen durchgehen, um dies zu beheben, ich möchte kritischere Probleme finden.
Weiß jemand, wie man diesen Fehler ausschaltet oder Legacy-JSLint verwendet?
AKTUALISIEREN
Beispiel:
function doSomethingWithNodes(nodes){
this.doSomething();
for (var i = 0; i < nodes.length; ++i){
this.doSomethingElse(nodes[i]);
}
doSomething(); // want to find this problem
}
jslint.com-Ausgabe:
Error:
Problem at line 4 character 8: Move all 'var' declarations to the top of the function.
for (var i = 0; i < nodes.length; ++i){
Problem at line 4 character 8: Stopping, unable to continue. (44% scanned).
Problem:
Variablen über den Funktionen zu haben, ist eine neue Anforderung. Ich kann JSLINT nicht zum Testen von Code verwenden, da es das Scannen des Skripts bei diesem Fehler stoppt.
Ich habe viel Code und möchte diese Warnung nicht als kritischen Fehler bedrohen.
UPDATE 22.08.2011: gefunden http://jshint.comes sieht viel besser aus als http://jslint.com/

Lee Kowalkowski
Aktualisierung Juni 2017: Abhängig von der Unterstützung (z. B. wenn Sie JavaScript nicht in Internet Explorer 10 oder niedriger ausführen), sollten Sie die Verwendung prüfen Lassen Anstatt von Var.
Zum Beispiel: for(let i=0; ...; i++)
Es gibt keine Möglichkeit, die ich setzen werde var i;
von einem for(var i=0; ...; i++)
an der Spitze meiner Funktionen. Besonders wenn Die JavaScript-Spezifikation hat es als akzeptable Syntax in der for
Abschnitt (12.6). Außerdem ist es die Syntax Brenda Eich in seinen Beispielen verwendet.
Die Idee, die Deklaration nach oben zu verschieben, ist, dass sie genauer widerspiegeln soll, was unter der Haube passiert, dies jedoch nur widerspiegelt, nicht beeinflusst.
Für mich ist das eine lächerliche Erwartung for
Iterationen. Dies umso mehr, als JSLint die Verarbeitung stoppt, wenn es dies erkennt.
Ob es lesbarer ist, Variablen am Anfang einer Funktion zu deklarieren, ist umstritten. Ich persönlich bevorzuge es, Iteratorvariablen zu deklarieren, wenn sie verwendet werden. Es ist mir egal, ob die Variable bereits intern erstellt wurde, ich initialisiere sie hier, damit ich sicher bin.
Ich würde argumentieren, dass das Deklarieren einer Iteratorvariablen dort, wo sie verwendet werden, sicherstellt, dass sie nicht versehentlich global gemacht werden (wenn Sie die Schleife in eine andere Funktion verschieben, bewegt sich die Iteratorvariable mit). Dies ist viel wartungsfreundlicher, als Variablendeklarationen am Anfang von Funktionen verwalten zu müssen.
Im Moment verwende ich http://www.javascriptlint.com/online_lint.php weil es sich auf das Wesentliche zu konzentrieren scheint.
Der Google Closure-Compiler erkennt den Typ der Schleifenvariable einer for…in-Schleife tatsächlich nicht richtig, es sei denn, sie ist wie for (var i in …) deklariert und es scheint keine Anmerkung dies zu beheben, sodass die Deklaration nicht verschoben werden kann Zum Seitenanfang.
Sie können herunterladen Legacy-Versionen jederzeit, oder ändern Sie die letzte Version. Es ist wirklich nicht so schwer (Suche nach move_var
). Führen Sie dann jslint lokal aus, entweder mit node oder mit einem Browser mit einem einfachen HTML-Formular – vielleicht möchten Sie Crockfords Original kopieren.
Beachten Sie, dass die Warnung als Teil von a eingeführt wurde große Umschreibungund tritt erst danach auf for(
daher ist die Meldung etwas irreführend.
Beachten Sie, dass sich das Verschieben aller Variablen nach oben von “eine Var-Anweisung pro Funktion zulassen” unterscheidet. Die Anforderung, alle Variablen nach oben zu verschieben, ist neu und scheint keinen Schalter zu haben. Mehr bei http://groups.google.com/group/jsmentors/browse_thread/thread/5e90c25230f8e22/70e1a95a20fb829e
Ich hatte dieses Problem auf meiner Codebasis, als wir auf die neueste Version von JSLINT umsteigen wollten. Wir hatten viele davon und die Leute waren nicht glücklich darüber, die Erklärung zu verschieben. Wir fanden tatsächlich, dass die eleganteste Lösung darin bestand, underscore.js zu verwenden und anstelle der vollständigen ausführlichen Schleife die Funktion _.each() zu verwenden, die den JSLint-Fehler entfernte und unseren Code funktionaler, sauberer, straffer und einfacher zu machen machte lesen.

Peter
Obwohl die Neu Beta JSLint dokumentiert keine Kommentardirektive für mehrere var
Toleranz innerhalb einer Funktion, es tut scheinen die Anweisungen der Originalversion zu unterstützen.
Das Original JSLint erlaubte Ihnen, dies zu tun:
/*jslint vars: true */
Nach meiner Erfahrung funktioniert das immer noch – ich nehme an, aus Gründen der Abwärtskompatibilität. Der Zeitpunkt dieses Schreibens ist Juni 2015.

Alexis Tyler
Ich habe festgestellt, dass die folgende Syntax den Fehler entfernt:
function doSomethingWithNodes(nodes) {
this.doSomething();
var i; // HERE is where you move the 'var' to the top of the function
for (i = 0; i < nodes.length; ++i) {
this.doSomethingElse(nodes[i]);
}
doSomething(); // want to find this problem
}
10192800cookie-checkJSLint-Fehler: Verschieben Sie alle „var“-Deklarationen an den Anfang der Funktionyes
Können Sie Ihre Frage präzisieren. Stellen Sie eigentlich zwei Fragen?
– James Weisemann
10. Januar 2011 um 12:15 Uhr
Hält es immer noch beim ersten Fehler an, wenn Sie das Häkchen entfernen
Stop on first error
?– david
1. Februar 2011 um 22:11 Uhr
Diese Seite wird es besser machen -> glat.info/jscheck
– vsync
25. Juni 2011 um 14:33 Uhr
@Lee Kowalkowski – kopieren Sie einfach Ihren Code dorthin und führen Sie ihn aus. Ich deklariere Variablen oben, damit sie ignoriert werden. (wie Fenster, $ usw.)
– vsync
1. Oktober 2011 um 17:29 Uhr
JSHint ist eine gute Wahl.
– B Robster
22. Juni 2012 um 15:39 Uhr