Frage JSLint meldet sich plötzlich: Benutze die Funktionsform von "use strict"


Ich schließe die Aussage ein:

"use strict";

am Anfang der meisten meiner Javascript-Dateien.

JSLint hat davor nie davor gewarnt. Aber jetzt heißt es:

Verwenden Sie das Funktionsformular von "use strict".

Weiß jemand was die "Funktionsform" wäre?


850
2017-12-16 15:36


Ursprung


Antworten:


Einschließen 'use strict'; als erste Anweisung in einer Umbruchfunktion, so dass sie nur diese Funktion betrifft. Dies verhindert Probleme beim Verketten von Skripts, die nicht streng sind.

Siehe Douglas Crockfords neuesten Blogeintrag Strict Mode kommt in die Stadt.

Beispiel aus diesem Post:

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

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

Aktualisieren: Falls Sie nicht sofort in die Funktion umbrechen möchten (z. B. ein Knotenmodul), können Sie die Warnung deaktivieren.

Zum JSLint (pro Zhami):

/*jslint node: true */

Zum JSHint:

/*jshint strict:false */

oder (per Laith Shaded)

/* jshint -W097 */

Um eine beliebige Warnung von JSHint zu deaktivieren, überprüfen Sie die Karte in JSHint Quellcode (Einzelheiten in Dokumente).

Update 2:  JSHint unterstützt node:boolean Möglichkeit. Sehen .jshintrc bei Github.

/* jshint node: true */

937
2017-12-16 15:44



Wenn Sie Module für NodeJS schreiben, sind sie bereits gekapselt. Sagen Sie JSLint, dass Sie einen Knoten haben, indem Sie ihn oben in Ihre Datei einfügen:

/*jslint node: true */

214
2017-07-07 12:38



Ich würde vorschlagen, zu verwenden jshint stattdessen.

Es ermöglicht, diese Warnung über zu unterdrücken /*jshint globalstrict: true*/.

Wenn Sie eine Bibliothek schreiben, würde ich nur vorschlagen, global strict zu verwenden, wenn Ihr Code wie bei nodejs in Module gekapselt ist.

Andernfalls würden Sie jeden, der Ihre Bibliothek verwendet, zwingen, den strikten Modus zu verwenden.


69
2017-10-12 14:58



Es gibt nichts, was von Natur aus falsch mit der String-Form ist.

Anstatt die "globale" strikte Form für die Sorge der Verkettung nicht-strikter Javascript zu vermeiden, ist es wahrscheinlich besser, nur die verdammt nicht-strikte Javascript zu strikt zu beheben.


15
2018-05-25 05:48



Ich fing an, eine Node.js / browserify Anwendung zu erstellen, die dem folgt Plattformübergreifendes JavaScript Blogeintrag. Und ich stieß auf dieses Problem, weil meine brandneue Gruntfile jshint nicht bestanden hat.

Zum Glück fand ich eine Antwort in der Leanpub Buch über Grunt:

Wenn wir es jetzt versuchen, werden wir unsere Gruntfile scannen ... und einige Fehler bekommen:

$ 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 Gruntfile ein Knotenprogramm ist und JSHint die Verwendung von standardmäßig nicht erkennt oder zulässt module und die String-Version von use strict. Wir können eine JSHint-Regel festlegen, die unsere Node-Programme akzeptiert. Lassen Sie uns unsere jshint Taskkonfiguration bearbeiten und einen Optionsschlüssel hinzufügen:

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

Hinzufügen node: true zum JShint optionsUm jshint in den "Node mode" zu setzen, wurden beide Fehler für mich entfernt.


15
2018-05-31 07:46



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

{
    "node": true
}

13
2017-07-29 08:15



Ich denke, jeder hat den "plötzlichen" Teil dieser Frage verpasst. Höchstwahrscheinlich weist Ihr .jshintrc einen Syntaxfehler auf, sodass die Zeile "Browser" nicht enthalten ist. Führen Sie es über einen JSON-Validator aus, um festzustellen, wo der Fehler liegt.


0
2017-09-13 16:58