984 Stimmen

JSLint meldet sich plötzlich: Verwenden Sie die Funktionsform von "use strict"

Ich schließe die Erklärung ein:

"use strict";

am Anfang der meisten meiner Javascript-Dateien.

JSLint hat noch nie vor diesem Problem gewarnt. Aber jetzt tut es das und sagt:

Verwenden Sie die Funktionsform von "use strict".

Weiß jemand, wie die "Funktionsform" aussehen könnte?

1044voto

bdukes Punkte 144019

Einbeziehen. 'use strict'; als erste Anweisung in einer Wrapping-Funktion, so dass sie sich nur auf diese Funktion auswirkt. Dies verhindert Probleme bei der Verkettung von Skripten, die nicht strikt sind.

Siehe Douglas Crockfords letzten Blogbeitrag Der strenge Modus kommt in die Stadt .

Beispiel aus diesem Beitrag:

(function () {
   'use strict';
   // this function is strict...
}());

(function () {
   // but this function is sloppy...
}());

Aktualisierung: Falls Sie keine sofortige Funktion einbinden wollen (z.B. weil es sich um ein Knotenmodul handelt), können Sie die Warnung deaktivieren.

Für JSLint (pro Zhami ):

/*jslint node: true */

Für JSHint :

/*jshint strict:false */

oder (per Laith Shadeed )

/* jshint -W097 */

Um jede willkürliche Warnung von JSHint zu deaktivieren, überprüfen Sie die Karte in JSHint-Quellcode (Einzelheiten in docs ).

Update 2: JSHint unterstützt node:boolean Option. Siehe .jshintrc auf github .

/* jshint node: true */

222voto

Zhami Punkte 18637

Wenn Sie Module für NodeJS schreiben, sind diese bereits gekapselt. Sagen Sie JSLint, dass Sie Node haben, indem Sie es am Anfang Ihrer Datei einfügen:

/*jslint node: true */

73voto

Thorsten Lorenz Punkte 11563

Ich würde vorschlagen, dass Sie jshint stattdessen.

Sie können diese Warnung unterdrücken über /*jshint globalstrict: true*/ .

Wenn Sie eine Bibliothek schreiben, würde ich die Verwendung von global strict nur vorschlagen, wenn Ihr Code in Module gekapselt ist, wie es bei Nodejs der Fall ist.

Andernfalls würden Sie jeden, der Ihre Bibliothek benutzt, in den strengen Modus zwingen.

19voto

qris Punkte 7326

Ich begann mit der Erstellung einer Node.js/browserify-Anwendung nach dem Plattformübergreifendes JavaScript Blogbeitrag. Und ich lief in dieses Problem, weil meine brandneue Gruntfile nicht jshint passieren.

Glücklicherweise habe ich eine Antwort in der Leanpub-Buch über Grunt :

Wenn wir es jetzt versuchen, werden wir unser Gruntfile scannen und einige Fehler erhalten:

$ grunt jshint

Running "jshint:all" (jshint) task
Linting Gruntfile.js...ERROR
[L1:C1] W097: Use the function form of "use strict".
'use strict';
Linting Gruntfile.js...ERROR
[L3:C1] W117: 'module' is not defined.
module.exports = function (grunt) {

Warning: Task "jshint:all" failed. Use --force to continue.

Beide Fehler sind darauf zurückzuführen, dass die Gruntdatei ein Node-Programm ist, und JSHint standardmäßig die Verwendung von module und die String-Version von use strict . Wir können eine JSHint-Regel festlegen, die unsere Node-Programme akzeptiert. Bearbeiten wir unsere jshint-Aufgabenkonfiguration und fügen wir einen Optionsschlüssel hinzu:

jshint: {
  options: {
    node: true
  },
}

Hinzufügen von node: true zum jshint options um jshint in den "Node-Modus" zu versetzen, wurden beide Fehler bei mir behoben.

18voto

Sahil Ahuja Punkte 1955

Fügen Sie eine Datei .jslintrc (oder .jshintrc im Falle von jshint) im Stammverzeichnis Ihres Projekts mit dem folgenden Inhalt hinzu:

{
    "node": true
}

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X