Question JSLint signale soudainement: Utilisez la forme de fonction "use strict"


J'inclus la déclaration:

"use strict";

au début de la plupart de mes fichiers Javascript.

JSLint n'a jamais prévenu à ce sujet. Mais maintenant, c'est en disant:

Utilisez le formulaire de fonction "use strict".

Est-ce que quelqu'un sait ce que serait la "forme de fonction"?


850
2017-12-16 15:36


origine


Réponses:


Comprendre 'use strict'; comme première déclaration dans une fonction d'enveloppement, elle n'affecte que cette fonction. Cela évite des problèmes lors de la concaténation de scripts qui ne sont pas stricts.

Voir le dernier article du blog de Douglas Crockford Le mode strict arrive en ville.

Exemple de ce post:

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

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

Mettre à jour: Dans le cas où vous ne souhaitez pas utiliser la fonction immédiate (par exemple, un module de noeud), vous pouvez désactiver l'avertissement.

Pour JSLint (par Zhami):

/*jslint node: true */

Pour JSHint:

/*jshint strict:false */

ou (par Laith Shadeed)

/* jshint -W097 */

Pour désactiver tout avertissement arbitraire de JSHint, vérifiez la carte dans JSHint code source (détails dans docs).

Mise à jour 2:  JSHint les soutiens node:boolean option. Voir .jshintrc à github.

/* jshint node: true */

937
2017-12-16 15:44



Si vous écrivez des modules pour NodeJS, ils sont déjà encapsulés. Dites à JSLint que vous avez un nœud en incluant en haut de votre fichier:

/*jslint node: true */

214
2017-07-07 12:38



Je suggère d'utiliser jshint au lieu.

Cela permet de supprimer cet avertissement via /*jshint globalstrict: true*/.

Si vous écrivez une bibliothèque, je vous suggérerais d'utiliser global strict si votre code est encapsulé dans des modules comme c'est le cas avec nodejs.

Sinon, vous forcez tous ceux qui utilisent votre bibliothèque en mode strict.


69
2017-10-12 14:58



Il n'y a rien de mal à la forme de la corde.

Plutôt que d'éviter la forme stricte «globale» pour s'inquiéter de la concaténation de javascript non strict, il est probablement préférable de simplement corriger le foutu javascript non strict pour être strict.


15
2018-05-25 05:48



J'ai commencé à créer une application Node.js / browserify suite à Cross Platform JavaScript article de blog. Et je suis tombé sur ce problème, parce que mon tout nouveau Gruntfile n'a pas passé jshint.

Heureusement, j'ai trouvé une réponse dans le Livre Leanpub sur Grunt:

Si nous l'essayons maintenant, nous allons scanner notre fichier Grunt ... et obtenir quelques erreurs:

$ 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.

Les deux erreurs sont parce que le Gruntfile est un programme Node, et par défaut JSHint ne reconnaît pas ou ne permet pas l'utilisation de module et la version de chaîne de use strict. Nous pouvons définir une règle JSHint qui acceptera nos programmes de nœuds. Modifions notre configuration de tâche jshint et ajoutons une clé d'options:

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

Ajouter node: true à la jshint options, pour mettre jshint en "mode Node", enlevé les deux erreurs pour moi.


15
2018-05-31 07:46



Ajoutez un fichier .jslintrc (ou .jshintrc dans le cas de jshint) à la racine de votre projet avec le contenu suivant:

{
    "node": true
}

13
2017-07-29 08:15



Je pense que tout le monde a raté la partie «soudainement» de cette question. Très probablement, votre fichier .jshintrc a une erreur de syntaxe, donc il n'inclut pas la ligne 'browser'. Exécutez-le via un validateur json pour voir où se trouve l'erreur.


0
2017-09-13 16:58



C'est si simple: si vous voulez être strict avec tout votre code, ajoutez "use strict"; au début de votre JavaScript.

Mais si vous voulez seulement être strict avec une partie de votre code, utilisez le formulaire de fonction. De toute façon, je vous recommande de l'utiliser au début de votre JavaScript, car cela vous aidera à être un meilleur codeur.


-5
2018-06-01 11:01