JSLint meldt plotseling: gebruik de functievorm van “gebruik strikt”

Ik voeg de verklaring toe:

"use strict";

aan het begin van de meeste van mijn Javascript-bestanden.

JSLint heeft hier nooit eerder voor gewaarschuwd. Maar nu is het, zeggende:

Gebruik de functievorm van “gebruik strikt”.

Weet iemand wat de “functievorm” zou zijn?


Antwoord 1, autoriteit 100%

Voeg 'use strict';toe als de eerste instructie in een wrap-functie, zodat het alleen die functie beïnvloedt. Dit voorkomt problemen bij het aaneenschakelen van scripts die niet strikt zijn.

Zie de nieuwste blogpost van Douglas Crockford De strikte modus komt naar de stad.

Voorbeeld uit dat bericht:

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

Bijwerken:
Als u de onmiddellijke functie niet wilt inpakken (het is bijvoorbeeld een knooppuntmodule), dan kunt u de waarschuwing uitschakelen.

Voor JSLint(per Zhami):

/*jslint node: true */

Voor JSHint:

/*jshint strict:false */

of (volgens Laith Shadeed)

/* jshint -W097 */

Als u willekeurige waarschuwingen van JSHint wilt uitschakelen, raadpleegt u de kaart in de JSHint-bron code(details in docs).

Update 2:JSHintondersteunt de optie node:boolean. Zie .jshintrcop github.

/* jshint node: true */

Antwoord 2, autoriteit 21%

Als u modules voor NodeJS schrijft, zijn deze al ingekapseld. Vertel JSLint dat je een node hebt door bovenaan je bestand het volgende op te nemen:

/*jslint node: true */

Antwoord 3, autoriteit 7%

Ik raad aan om in plaats daarvan jshintte gebruiken.

Hiermee kunt u deze waarschuwing onderdrukken via /*jshint globalstrict: true*/.

Als je een bibliotheek schrijft, raad ik je aan om alleen global strict te gebruiken als je code is ingekapseld in modules, zoals het geval is bij nodejs.

Anders zou je iedereen die je bibliotheek gebruikt in de strikte modus dwingen.


Antwoord 4, autoriteit 2%

Ik ben begonnen met het maken van een Node.js/browserify-toepassing volgens de Cross Platform JavaScriptblogbericht. En ik kwam dit probleem tegen, omdat mijn gloednieuwe Gruntfile niet door jshint kwam.

Gelukkig vond ik een antwoord in het Leanpub-boek over Grunt:

Als we het nu proberen, zullen we ons Gruntbestand scannen… en enkele fouten krijgen:

$ 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 fouten zijn omdat de Gruntfile een Node-programma is en standaard JSHint het gebruik van moduleen de stringversie van use strictniet herkent of toestaat. We kunnen een JSHint-regel instellen die onze Node-programma’s accepteert. Laten we onze jshint-taakconfiguratie aanpassen en een optietoets toevoegen:

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

Door node: truetoe te voegen aan de jshint options, om jshint in “Node-modus” te zetten, werden beide fouten voor mij verwijderd.


Antwoord 5, autoriteit 2%

Voeg een bestand .jslintrc (of .jshintrc in het geval van jshint) toe aan de hoofdmap van uw project met de volgende inhoud:

{
    "node": true
}

Antwoord 6, autoriteit 2%

Er is aangeboren niets mis met de tekenreeksvorm.

In plaats van de “algemene” strikte vorm te vermijden om niet-strikt javascript aan elkaar te koppelen, is het waarschijnlijk beter om het verdomde niet-strikte javascript gewoon strikt te maken.


Antwoord 7

Ik denk dat iedereen het ‘plotselinge’ deel van deze vraag heeft gemist. Hoogstwaarschijnlijk heeft uw .jshintrc een syntaxisfout, dus het bevat niet de ‘browser’-regel. Voer het door een json-validator om te zien waar de fout zit.


Antwoord 8

process.on('warning', function(e) {
    'use strict';
    console.warn(e.stack);
});
process.on('uncaughtException', function(e) {
    'use strict';
    console.warn(e.stack);
});

voeg deze regels toe aan het beginpunt van je bestand


Antwoord 9

Zo simpel is het: als je streng wilt zijn met al je code, voeg dan "use strict";toe aan het begin van je JavaScript.

Maar als je alleen streng wilt zijn met een deel van je code, gebruik dan het functieformulier. Hoe dan ook, ik zou je aanraden om het aan het begin van je JavaScript te gebruiken, omdat dit je zal helpen een betere programmeur te worden.

Other episodes