Récemment, j'ai exécuté une partie de mon code JavaScript via JSLint de Crockford , et il a donné l'erreur suivante:
Problème à la ligne 1, caractère 1: instruction "use strict" manquante.
En faisant quelques recherches, j'ai réalisé que certaines personnes ajoutent "use strict";
à leur code JavaScript. Une fois que j'ai ajouté la déclaration, l'erreur a cessé d'apparaître. Malheureusement, Google n'a pas révélé une grande partie de l'histoire derrière cette déclaration de chaîne. Certes, cela doit avoir quelque chose à voir avec la façon dont le JavaScript est interprété par le navigateur, mais je n'ai aucune idée de l'effet.
Alors "use strict";
, qu'est-ce que cela implique, qu'est-ce que cela implique et est-il toujours pertinent?
Est-ce que l'un des navigateurs actuels répond à la "use strict";
chaîne ou est-ce pour une utilisation future?
la source
"use strict";
seule ne rend pas JS à portée lexicale. La déclaration des variables aveclet
etconst
doit également être utilisée.Réponses:
Cet article sur Javascript Strict Mode pourrait vous intéresser: John Resig - ECMAScript 5 Strict Mode, JSON, etc.
Pour citer quelques parties intéressantes:
Et:
Notez également que vous pouvez appliquer le "mode strict" à l'ensemble du fichier ... Ou vous pouvez l'utiliser uniquement pour une fonction spécifique (toujours en citant l'article de John Resig) :
Ce qui pourrait être utile si vous devez mélanger l'ancien et le nouveau code ;-)
Donc, je suppose que c'est un peu comme le que
"use strict"
vous pouvez utiliser en Perl (d'où le nom?) : Il vous aide à faire moins d'erreurs, en détectant plus de choses qui pourraient conduire à des ruptures.Le mode strict est désormais pris en charge par tous les principaux navigateurs .
Dans les modules ECMAScript natifs (avec
import
etexport
instructions) et les classes ES6 , le mode strict est toujours activé et ne peut pas être désactivé.la source
"use strict"
dans Firefox 3.6, Safari 5, Chrome 7 et Opera 10.6 (tous Mac). Aucune erreur, donc je suppose que `` utiliser strictement '' n'est pas encore pris en charge dans aucun navigateur. N'a pas testé dans IE9 cependant;)C'est une nouvelle fonctionnalité d'ECMAScript 5. John Resig en a rédigé un joli résumé .
C'est juste une chaîne que vous mettez dans vos fichiers JavaScript (en haut de votre fichier ou à l'intérieur d'une fonction) qui ressemble à ceci:
Le mettre dans votre code maintenant ne devrait pas poser de problème avec les navigateurs actuels car c'est juste une chaîne. Cela peut entraîner des problèmes avec votre code à l'avenir si votre code viole le pragma. Par exemple, si vous en avez actuellement
foo = "bar"
sans définir d'foo
abord, votre code commencera à échouer ... ce qui est une bonne chose à mon avis.la source
<script>"use strict";
. Le drapeau ne s'applique qu'au bloc dans lequel il est inclus.'use strict';
place"use strict";
, cela échouera à la place. Cela a plus de sens, car s'il l'ajoute à l'objet global, cela signifie qu'il peut ne pas fonctionner la prochaine fois que vous exécutez la fonction / faites quelque chose d'autre qui réinitialise le bloc, car il se trouvera dans le bloc le plus élevé (global).L'instruction
"use strict";
demande au navigateur d'utiliser le mode strict, qui est un ensemble de fonctionnalités réduites et plus sûres de JavaScript.Liste des fonctionnalités (non exhaustive)
Interdit les variables globales. (Capture les
var
déclarations manquantes et les fautes de frappe dans les noms de variables)Les affectations silencieuses qui échouent génèrent une erreur en mode strict (affectation
NaN = 5;
)Les tentatives de suppression de propriétés non supprimables lanceront (
delete Object.prototype
)Exige que tous les noms de propriété d'un littéral d'objet soient uniques (
var x = {x1: "1", x1: "2"}
)Les noms des paramètres de fonction doivent être uniques (
function sum (x, x) {...}
)Interdit la syntaxe octale (
var x = 023;
certains développeurs supposent à tort qu'un zéro précédent ne fait rien pour changer le nombre.)Interdit le
with
mot cléeval
en mode strict n'introduit pas de nouvelles variablesInterdit la suppression de noms en clair (
delete x;
)Interdit la liaison ou l'attribution des noms
eval
etarguments
sous quelque forme que ce soitLe mode strict n'aliase pas les propriétés de l'
arguments
objet avec les paramètres formels. (c'est-à-dire dansfunction sum (a,b) { return arguments[0] + b;}
Cela fonctionne parce quearguments[0]
est lié àa
et ainsi de suite.)arguments.callee
n'est pas pris en charge[Ref: Mode strict , Mozilla Developer Network ]
la source
window.foo = bar
).Si les gens s'inquiètent de son utilisation,
use strict
il peut être utile de consulter cet article:Prise en charge du mode strict par ECMAScript 5 dans les navigateurs. Qu'est-ce que ça veut dire?
NovoGeek.com - le blog de Krishna
Il parle de la prise en charge du navigateur, mais plus important encore, de la manière de le gérer en toute sécurité:
la source
window
this
laquelle vous ne pouvez pas ciblerwindow
?this
appartient à sa propre fonction et non à la fenêtre globalethis
c'est en faitundefined
.Un mot d'avertissement, vous tous les programmeurs en charge: appliquer
"use strict"
au code existant peut être dangereux! Cette chose n'est pas un autocollant joyeux et joyeux que vous pouvez gifler sur le code pour le rendre «meilleur». Avec le"use strict"
pragma, le navigateur jettera soudain des exceptions dans des endroits aléatoires qu'il n'a jamais lancés auparavant simplement parce qu'à cet endroit, vous faites quelque chose que le JavaScript par défaut / lâche permet avec bonheur mais abhorre JavaScript strict! Vous pouvez avoir des violations de rigueur se cachant dans les appels rarement utilisés dans votre code qui ne lèveront une exception que lorsqu'ils seront finalement exécutés - par exemple, dans l'environnement de production que vos clients payants utilisent!Si vous allez franchir le pas, c'est une bonne idée de l'appliquer
"use strict"
aux côtés de tests unitaires complets et d'une tâche de construction JSHint strictement configurée qui vous donnera une certaine assurance qu'il n'y a pas de coin sombre de votre module qui explosera horriblement juste parce que vous 'ai activé le mode strict. Ou, hé, voici une autre option: n'ajoutez rien"use strict"
à votre code hérité, c'est probablement plus sûr de cette façon, honnêtement. DÉFINITIVEMENT NE PAS ajouter"use strict"
à des modules que vous ne possédez pas ou ne maintenez pas, comme des modules tiers.Je pense que même s'il s'agit d'un animal en cage mortel, cela
"use strict"
peut être une bonne chose, mais vous devez le faire correctement. Le meilleur moment pour devenir strict est lorsque votre projet est entièrement nouveau et que vous partez de zéro. ConfigurezJSHint/JSLint
avec tous les avertissements et options montés aussi serrés que votre équipe peut l'estimer, obtenez un bon système de construction / test / affirmation du jour truquéGrunt+Karma+Chai
, et seulement ALORS commencez à marquer tous vos nouveaux modules comme"use strict"
. Soyez prêt à remédier à de nombreuses erreurs et avertissements. Assurez-vous que tout le monde comprend la gravité en configurant la génération sur FAIL si elleJSHint/JSLint
produit des violations.Mon projet n'était pas un projet vierge lorsque j'ai adopté
"use strict"
. En conséquence, mon IDE est plein de marques rouges parce que je n'ai pas"use strict"
sur la moitié de mes modules, et JSHint s'en plaint. C'est un rappel pour moi de ce que je devrais refactoriser à l'avenir. Mon objectif est d'être libre de toute marque rouge en raison de toutes mes"use strict"
déclarations manquantes , mais c'est dans des années.la source
"use strict";
au code existant. Cela étant dit, je l'utilise presque toujours lorsque j'écris du nouveau code à partir de zéroL'utilisation
'use strict';
n'améliore pas soudainement votre code.le mode strict JavaScript est une fonctionnalité d' ECMAScript 5 . Vous pouvez activer le mode strict en le déclarant en haut de votre script / fonction.
Lorsqu'un moteur JavaScript voit cette directive , il commence à interpréter le code dans un mode spécial. Dans ce mode, des erreurs sont émises lorsque certaines pratiques de codage qui pourraient finir par être des bogues potentiels sont détectées (ce qui est le raisonnement derrière le mode strict).
Considérez cet exemple:
Dans son obsession d'aligner les littéraux numériques, le développeur a par inadvertance initialisé une variable
b
avec un littéral octal. Le mode non strict interprétera cela comme un littéral numérique avec valeur24
(en base 10). Cependant, le mode strict générera une erreur.Pour une liste non exhaustive des spécialités en mode strict, voir cette réponse .
Où devrais-je utiliser
'use strict';
?Dans ma nouvelle application JavaScript: Absolument! Le mode strict peut être utilisé comme un lanceur d'alerte lorsque vous faites quelque chose de stupide avec votre code.
Dans mon code JavaScript existant : Probablement pas! Si votre code JavaScript existant contient des instructions interdites en mode strict, l'application se cassera simplement. Si vous voulez un mode strict, vous devez être prêt à déboguer et à corriger votre code existant. C'est pourquoi l' utilisation
'use strict';
n'améliore pas soudainement votre code .Comment utiliser le mode strict?
Insérez une
'use strict';
déclaration au-dessus de votre script:Notez que tout dans le fichier
myscript.js
sera interprété en mode strict.Ou, insérez une
'use strict';
déclaration au-dessus de votre corps de fonction:Tout dans la portée lexicale de la fonction
doSomething
sera interprété en mode strict. Le mot portée lexicale est important ici. Par exemple, si votre code strict appelle une fonction d'une bibliothèque qui n'est pas stricte , seul votre code est exécuté en mode strict, et non la fonction appelée. Voir cette réponse pour une meilleure explication.Quelles sont les choses interdites en mode strict?
J'ai trouvé un bel article décrivant plusieurs choses interdites en mode strict (notez que ce n'est pas une liste exclusive):
Mots réservés pour les futures versions de JavaScript
ECMAScript 5 ajoute une liste de mots réservés. Si vous les utilisez comme variables ou arguments, le mode strict générera une erreur. Les mots réservés sont:
Lectures complémentaires
la source
'use strict'
directive, ils seront exécutés en mode non strict, même lorsqu'ils sont appelés à partir d'une fonction s'exécutant en mode strict. Voir cette réponse pour une explication.this
). Maintenant, je vois que vous parliez d'appeler d'autres fonctions.Je recommande fortement à chaque développeur de commencer à utiliser le mode strict maintenant. Il y a suffisamment de navigateurs qui le prennent en charge pour que le mode strict nous aide légitimement à éviter des erreurs que nous ne savions même pas dans votre code.
Apparemment, au stade initial, il y aura des erreurs que nous n'avons jamais rencontrées auparavant. Pour obtenir tous les avantages, nous devons effectuer des tests appropriés après le passage en mode strict pour nous assurer que nous avons tout pris. Certainement, nous ne nous contentons pas de jeter
use strict
notre code et de supposer qu'il n'y a pas d'erreurs. Donc, le désabonnement est qu'il est temps de commencer à utiliser cette fonctionnalité de langage incroyablement utile pour écrire un meilleur code.Par exemple,
JSLint est un débogueur écrit par Douglas Crockford. Collez simplement votre script et il recherchera rapidement tout problème ou erreur notable dans votre code.
la source
Je voudrais proposer une réponse un peu plus fondée complétant les autres réponses. J'espérais éditer la réponse la plus populaire, mais j'ai échoué. J'ai essayé de le rendre aussi complet et complet que possible.
Vous pouvez vous référer à la documentation MDN pour plus d'informations.
"use strict"
une directive introduite dans ECMAScript 5.Les directives sont similaires aux déclarations, mais différentes.
use strict
ne contient pas de mots clés: la directive est une instruction d'expression simple, qui consiste en un littéral de chaîne spécial (entre guillemets simples ou doubles). Les moteurs JavaScript, qui n'implémentent pas ECMAScript 5, voient simplement une instruction d'expression sans effets secondaires. Il est prévu que les futures versions des normes ECMAScript introduisentuse
un véritable mot clé; les citations deviendraient ainsi obsolètes.use strict
ne peut être utilisé qu'au début d'un script ou d'une fonction, c'est-à-dire qu'il doit précéder toute autre instruction (réelle). Il n'est pas nécessaire que ce soit la première instruction dans un script de fonction: elle peut être précédée d'autres expressions d'instruction qui se composent de littéraux de chaîne (et les implémentations JavaScript peuvent les traiter comme des directives spécifiques à l'implémentation). Les instructions de littéraux de chaîne, qui suivent une première instruction réelle (dans un script ou une fonction) sont des instructions d'expression simples. Les interprètes ne doivent pas les interpréter comme des directives et ils n'ont aucun effet.La
use strict
directive indique que le code suivant (dans un script ou une fonction) est un code strict. Le code au plus haut niveau d'un script (code qui n'est pas dans une fonction) est considéré comme un code strict lorsque le script contient uneuse strict
directive. Le contenu d'une fonction est considéré comme un code strict lorsque la fonction elle-même est définie dans un code strict ou lorsque la fonction contient uneuse strict
directive. Le code transmis à uneeval()
méthode est considéré comme un code strict lorsqu'il aeval()
été appelé à partir d'un code strict ou contient lause strict
directive elle-même.Le mode strict d'ECMAScript 5 est un sous-ensemble restreint du langage JavaScript, qui élimine les déficits pertinents du langage et propose une vérification des erreurs plus stricte et une sécurité plus élevée. Voici une liste des différences entre le mode strict et le mode normal (dont les trois premiers sont particulièrement importants):
with
déclaration-en mode strict.Object
, vous obtiendrez unReferenceError
. En mode normal, l'identifiant est implicitement déclaré comme une variable globale (comme une propriété du globalObject
)this
a la valeurundefined
dans les fonctions qui ont été invoquées en tant que fonctions (pas en tant que méthodes). (En mode normal,this
pointe toujours vers le globalObject
). Cette différence peut être utilisée pour tester si une implémentation prend en charge le mode strict:De même, lorsqu'une fonction est invoquée avec
call()
ouapply
en mode strict, alorsthis
est exactement la valeur du premier argument de l' invocationcall()
orapply()
. (En mode normalnull
etundefined
sont remplacés par le globalObject
et les valeurs, qui ne sont pas des objets, sont converties en objets.)En mode strict, vous obtiendrez un
TypeError
, lorsque vous essayez d'affecter à des propriétés en lecture seule ou de définir de nouvelles propriétés pour un objet non extensible. (En mode normal, les deux échouent simplement sans message d'erreur.)eval()
vous passez du code à , vous ne pouvez pas déclarer ou définir des variables ou des fonctions dans la portée de l'appelant (comme vous pouvez le faire en mode normal). Au lieu de cela, une nouvelle étendue est créée poureval()
et les variables et fonctions sont dans cette étendue. Cette portée est détruite une fois l'eval()
exécution terminée.SyntaxError
lorsque l'delete
opérateur est suivi d'un identifiant non qualifié (variable, fonction ou paramètre de fonction). En mode normal, l'delete
expression ne ferait rien et est évaluée àfalse
.TypeError
lorsque vous essayez de supprimer une propriété non configurable. (En mode normal, la tentative échoue simplement et l'delete
expression est évaluée àfalse
).0x
. (En mode normal, certaines implémentations autorisent les littéraux octaux.)eval
etarguments
sont traités comme des mots-clés. Vous ne pouvez pas modifier leur valeur, ne pouvez pas leur attribuer une valeur et vous ne pouvez pas les utiliser comme noms pour des variables, des fonctions, des paramètres de fonction ou des identificateurs d'un bloc catch.arguments.caller
etarguments.callee
provoquer unTypeError
dans une fonction en mode strict. De plus, certaines propriétés d'appel et d'argument des fonctions en mode strict provoquent unTypeError
lorsque vous essayez de les lire.la source
0
.Mes deux centimes:
L'un des objectifs du mode strict est de permettre un débogage plus rapide des problèmes. Il aide les développeurs en lançant une exception lorsque certaines mauvaises choses se produisent qui peuvent provoquer un comportement silencieux et étrange de votre page Web. Le moment où nous utilisons
use strict
, le code générera des erreurs qui aideront le développeur à le corriger à l'avance.Peu de choses importantes que j'ai apprises après utilisation
use strict
:Empêche la déclaration de variable globale:
Maintenant, ce code crée
nameoftree
une portée globale accessible à l'aide dewindow.nameoftree
. Lorsque nous implémentonsuse strict
le code, cela génère une erreur.Sample
Élimine la
with
déclaration:with
les instructions ne peuvent pas être minifiées à l'aide d'outils comme uglify-js . Ils sont également obsolètes et supprimés des futures versions de JavaScript.Sample
Empêche les doublons:
Lorsque nous avons une propriété en double, elle lève une exception
Il y en a peu mais j'ai besoin d'acquérir plus de connaissances à ce sujet.
la source
Si vous utilisez un navigateur sorti au cours de la dernière année, il prend probablement en charge le mode JavaScript Strict. Seuls les navigateurs plus anciens avant ECMAScript 5 sont devenus la norme actuelle ne le prennent pas en charge.
Les guillemets autour de la commande garantissent que le code fonctionnera également dans les anciens navigateurs (bien que les choses qui génèrent une erreur de syntaxe en mode strict provoquent généralement un dysfonctionnement du script d'une manière difficile à détecter dans ces anciens navigateurs).
la source
Lors de l'ajout
"use strict";
, les cas suivants lèveront une SyntaxError avant l'exécution du script:Préparer le terrain pour la future version de ECMAScript , en utilisant l' un des mots - clés nouvellement réservés (pour en prevision ECMAScript 6 ):
implements
,interface
,let
,package
,private
,protected
,public
,static
etyield
.Déclarer la fonction en blocs
Syntaxe octale
this
pointez sur l'objet global.Déclarer deux fois le même nom pour un nom de propriété dans un objet littéral
Ce n'est plus le cas dans ECMAScript 6 ( bug 1041128 ).
Déclaration de deux arguments de fonction avec la même fonction de nom
Définition d'une valeur sur une variable non déclarée
Utilisation
delete
sur un nom de variabledelete myVariable;
Utilisation de
eval
ouarguments
comme nom d'argument de variable ou de fonctionSources:
Transition en mode strict sur MDN
Mode strict sur MDN
Le mode strict de JavaScript et pourquoi vous devriez l'utiliser sur le blog de Colin J. Ihrig (version archivée)
la source
Le mode strict apporte plusieurs modifications à la sémantique JavaScript normale:
élimine certaines erreurs silencieuses JavaScript en les modifiant pour générer des erreurs.
corrige les erreurs qui empêchent les moteurs JavaScript d'effectuer des optimisations.
interdit certaines syntaxes susceptibles d'être définies dans les futures versions d'ECMAScript.
pour plus d'informations vistit Strict Mode- Javascript
la source
"Utiliser strictement"; est une assurance que le programmeur n'utilisera pas les propriétés lâches ou mauvaises de JavaScript. C'est un guide, tout comme une règle vous aidera à faire des lignes droites. "Utiliser Strict" vous aidera à "coder directement".
Ceux qui préfèrent ne pas utiliser de règles pour faire leurs lignes directement se retrouvent généralement dans ces pages demandant à d'autres de déboguer leur code.
Crois moi. La surcharge est négligeable par rapport à un code mal conçu. Doug Crockford, qui est un développeur JavaScript senior depuis plusieurs années, a un poste très intéressant ici . Personnellement, j'aime revenir tout le temps sur son site pour m'assurer de ne pas oublier ma bonne pratique.
La pratique JavaScript moderne devrait toujours évoquer le "Use Strict"; pragma. La seule raison pour laquelle le groupe ECMA a rendu le mode "Strict" facultatif est de permettre aux codeurs moins expérimentés d'accéder à JavaScript et de leur donner ensuite le temps de s'adapter aux nouvelles pratiques de codage plus sûres.
la source
Inclure
use strict
au début de tous vos fichiers JavaScript sensibles à partir de ce point est un petit moyen d'être un meilleur programmeur JavaScript et d'éviter que les variables aléatoires ne deviennent globales et que les choses changent silencieusement.la source
Citant de w3schools :
Veuillez vous référer à http://www.w3schools.com/js/js_strict.asp pour en savoir plus
la source
"use strict"
fait exécuter du code JavaScript en mode strict , ce qui signifie essentiellement que tout doit être défini avant utilisation. La principale raison de l'utilisation du mode strict est d'éviter les utilisations globales accidentelles de méthodes non définies.Également en mode strict, les choses fonctionnent plus vite, certains avertissements ou avertissements silencieux génèrent des erreurs fatales, il est préférable de toujours l'utiliser pour créer un code plus net.
"use strict"
est largement nécessaire pour être utilisé dans ECMA5, dans ECMA6, il fait partie de JavaScript par défaut , il n'a donc pas besoin d'être ajouté si vous utilisez ES6.Regardez ces déclarations et exemples de MDN:
1) mode strict dans les fonctions
2) Mode strict de script entier
3) Affectation à un global non accessible en écriture
Vous pouvez en savoir plus sur MDN .
la source
Il y a une bonne discussion par certaines personnes qui faisaient partie du comité ECMAScript: Modifications de JavaScript, partie 1: ECMAScript 5 " sur la façon dont l'utilisation incrémentielle de la
"use strict"
commutateur permet aux implémenteurs JavaScript de nettoyer de nombreuses fonctionnalités dangereuses de JavaScript sans casser soudainement tous les sites Web dans le monde.Bien sûr, il parle également de ce que beaucoup de ces erreurs sont (étaient) et comment ECMAScript 5 les corrige.
la source
Petits exemples à comparer:
Mode non strict:
Mode strict:
Mode non strict:
la source
this === 'a'
dans les deux exemples?Notez que cela a
use strict
été introduit dans EcmaScript 5 et a été conservé depuis lors.Voici les conditions pour déclencher le mode strict dans ES6 et ES7 :
la source
Les principales raisons pour lesquelles les développeurs devraient utiliser
"use strict"
sont:Empêche la déclaration accidentelle de variables globales.Using
"use strict()"
s'assurera que les variables sont déclarées avecvar
avant utilisation. Par exemple:"use strict"
directive n'est reconnue qu'au début d'un script ou d'une fonction.La chaîne
"arguments"
ne peut pas être utilisée comme variable:Limitera l'utilisation des mots clés comme variables. Essayer de les utiliser générera des erreurs.
En bref, votre code sera moins sujet aux erreurs et vous fera à son tour écrire un bon code.
Pour en savoir plus, vous pouvez vous référer ici .
la source
"utiliser strict"; est l'effort de l'ECMA pour rendre JavaScript un peu plus robuste. Il apporte à JS une tentative de le rendre au moins un peu "strict" (d'autres langages implémentent des règles strictes depuis les années 90). En fait, cela "oblige" les développeurs JavaScript à suivre une sorte de bonnes pratiques de codage. Pourtant, JavaScript est très fragile. Il n'y a rien de tel que les variables typées, les méthodes typées, etc. Je recommande fortement aux développeurs JavaScript d'apprendre un langage plus robuste tel que Java ou ActionScript3, et d'implémenter les mêmes bonnes pratiques dans votre code JavaScript, cela fonctionnera mieux et sera plus facile à déboguer.
la source
Le mode «strict» JavaScript a été introduit dans ECMAScript 5.
L'écriture
"use strict";
tout en haut de votre fichier JS active la vérification stricte de la syntaxe. Il effectue les tâches suivantes pour nous:affiche une erreur si vous essayez d'affecter à une variable non déclarée
vous empêche d'écraser les bibliothèques système JS clés
interdit certaines fonctionnalités linguistiques dangereuses ou sujettes aux erreurs
use strict
fonctionne également à l'intérieur des fonctions individuelles. Il est toujours préférable d'inclureuse strict
dans votre code.Problème de compatibilité du navigateur: les directives "use" sont censées être rétrocompatibles. Les navigateurs qui ne les prennent pas en charge verront simplement un littéral de chaîne qui n'est plus référencé. Alors, ils passeront dessus et continueront.
la source
use strict
est un moyen de rendre votre code plus sûr, car vous ne pouvez pas utiliser des fonctionnalités dangereuses qui ne fonctionnent pas comme prévu. Et, comme cela a été écrit auparavant, cela rend le code plus strict.la source
Utiliser Strict est utilisé pour afficher les erreurs courantes et répétées afin qu'il soit traité différemment, et change la façon dont le script java s'exécute, ces modifications sont:
Empêche les globaux accidentels
Pas de doublons
Élimine avec
Élimine cette contrainte
Eval plus sûr ()
Erreurs pour les immuables
vous pouvez également lire cet article pour les détails
la source
Normalement, JavaScript ne suit pas de règles strictes, augmentant ainsi les risques d'erreurs. Après utilisation
"use strict"
, le code JavaScript doit suivre un ensemble de règles strictes comme dans d'autres langages de programmation tels que l'utilisation de terminateurs, la déclaration avant l'initialisation, etc.Si
"use strict"
est utilisé, le code doit être écrit en suivant un ensemble strict de règles, diminuant ainsi les risques d'erreurs et d'ambiguïtés.la source
"utiliser strict"; Définit que le code JavaScript doit être exécuté en "mode strict".
Tous les navigateurs modernes prennent en charge "utiliser strictement" à l'exception d' Internet Explorer 9 et des versions antérieures .
Désavantage
Si un développeur utilisait une bibliothèque qui était en mode strict, mais qu'il était habitué à travailler en mode normal, il pourrait appeler des actions sur la bibliothèque qui ne fonctionneraient pas comme prévu.
Pire, puisque le développeur est en mode normal, il n'a pas l'avantage de générer des erreurs supplémentaires, de sorte que l'erreur peut échouer en silence.
En outre, comme indiqué ci-dessus, le mode strict vous empêche de faire certaines choses.
Les gens pensent généralement que vous ne devriez pas utiliser ces choses en premier lieu, mais certains développeurs n'aiment pas la contrainte et souhaitent utiliser toutes les fonctionnalités du langage.
Pour un exemple de base et pour référence, passez par:
https://www.tutorialsteacher.com/javascript/javascript-strict
la source
Le mode strict peut empêcher les fuites de mémoire.
Veuillez vérifier la fonction ci-dessous écrite en mode non strict:
Dans cette fonction, nous utilisons une variable appelée
name
à l'intérieur de la fonction. En interne, le compilateur vérifiera d'abord s'il existe une variable déclarée avec ce nom particulier dans cette portée de fonction particulière. Étant donné que le compilateur a compris qu'il n'y a pas une telle variable, il vérifiera la portée externe. Dans notre cas, c'est la portée mondiale. Encore une fois, le compilateur a compris qu'il n'y avait pas non plus de variable déclarée dans l'espace global avec ce nom, donc il crée une telle variable pour nous dans l'espace global. Conceptuellement, cette variable sera créée dans la portée globale et sera disponible dans toute l'application.Un autre scénario est que, disons, la variable est déclarée dans une fonction enfant. Dans ce cas, le compilateur vérifie la validité de cette variable dans la portée externe, c'est-à-dire la fonction parent. Ce n'est qu'alors qu'il vérifiera l'espace global et créera une variable pour nous là-bas. Cela signifie que des vérifications supplémentaires doivent être effectuées. Cela affectera les performances de l'application.
Écrivons maintenant la même fonction en mode strict.
Nous obtiendrons l'erreur suivante.
Ici, le compilateur renvoie l'erreur de référence. En mode strict, le compilateur ne nous permet pas d'utiliser la variable sans la déclarer. Ainsi, les fuites de mémoire peuvent être évitées. De plus, nous pouvons écrire du code plus optimisé.
la source