956 votes

JSLint fait soudainement un rapport : Utilisez la forme de fonction de "use strict".

J'inclus la déclaration :

"use strict";

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

JSLint n'a jamais fait d'avertissement à ce sujet. Mais maintenant il le fait, en disant :

Utilisez la forme de fonction de "use strict".

Quelqu'un sait-il quelle serait la "forme de la fonction" ?

1034voto

bdukes Points 54833

Inclure 'use strict'; en tant que première déclaration dans une fonction enveloppante, de sorte qu'elle n'affecte que cette fonction. Cela évite les problèmes lors de la concaténation de scripts qui ne sont pas stricts.

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

Exemple de ce poste :

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

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

Mise à jour : Si vous ne souhaitez pas intégrer une fonction immédiate (par exemple, s'il s'agit d'un module de nœud), 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 Code source de JSHint (détails dans docs ).

Mise à jour 2 : JSHint soutient node:boolean option. Voir .jshintrc sur github .

/* jshint node: true */

1 votes

Dans JSLint pour Visual Studio c'est l'option : "Allow global ES5 strict"

10 votes

Cela n'a pas de sens pour les applications Node, cependant. -1

1 votes

Salut Nico, j'ai mis à jour la réponse, pour le nœud vous pouvez taper : /* jshint -W097 */ pour désactiver cet avertissement.

220voto

Zhami Points 4851

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

/*jslint node: true */

2 votes

Pour info, cette option fonctionne pour JSLint, mais JSHint ne désactive pas l'avertissement de rigueur avec cette directive. Pour JSHint, essayez /*jshint strict:false */

4 votes

Rédigé pour moi avec JSHint v2.9.2. Ajouté "node": true à .jshintrc

72voto

Thorsten Lorenz Points 4419

Je suggère d'utiliser jshint à la place.

Il est possible de supprimer cet avertissement via /*jshint globalstrict: true*/ .

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

Sinon, vous obligeriez tous ceux qui utilisent votre bibliothèque à passer en mode strict.

0 votes

6 votes

FYI : L'option globalstrict dans JSHint a changé. Essayez strict: 'global' maintenant, et voir jshint.com/docs/options/#globalstrict

19voto

qris Points 1649

J'ai commencé à créer une application Node.js/browserify en suivant les instructions de l'équipe de développement. JavaScript multiplateforme blog post. Et j'ai rencontré ce problème, parce que mon tout nouveau fichier Grunt n'a pas passé jshint.

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

Si nous 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 dues au fait que le fichier Grunt est un programme Node, et par défaut, JSHint ne reconnaît pas ou n'autorise pas l'utilisation des fichiers module et la version en chaîne de use strict . Nous pouvons définir une règle JSHint qui acceptera nos programmes Node. Éditons la configuration de notre tâche jshint et ajoutons une clé d'options :

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

Ajout de node: true au jshint options pour mettre jshint en "mode Node", a supprimé les deux erreurs pour moi.

16voto

glycoslave Points 133

Il n'y a rien d'intrinsèquement mauvais dans la forme de la corde.

Plutôt que d'éviter la forme stricte "globale" par crainte de concaténer du javascript non strict, il est probablement préférable de simplement corriger le satané javascript non strict pour qu'il soit strict.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X