JavaScript Modification des propriétés globales


Exemple

Dans une portée de mode non strict, lorsqu'une variable est affectée sans être initialisée avec le mot let clé var , const ou let , elle est automatiquement déclarée dans la portée globale:

a = 12;
console.log(a); // 12

En mode strict, tout accès à une variable non déclarée provoquera une erreur de référence:

"use strict";
a = 12; // ReferenceError: a is not defined
console.log(a);

Cela est utile car JavaScript peut comporter un certain nombre d'événements parfois inattendus. En mode non strict, ces événements amènent souvent les développeurs à penser qu’il s’agit de bogues ou d’un comportement inattendu. Par conséquent, en activant le mode strict, toute erreur qui leur est imposée les oblige à savoir exactement ce qui est fait.


"use strict";
                       // Assuming a global variable mistypedVariable exists
mistypedVaraible = 17; // this line throws a ReferenceError due to the 
                       // misspelling of variable

Ce code en mode strict affiche un scénario possible: il génère une erreur de référence qui pointe vers le numéro de ligne de l'affectation, permettant au développeur de détecter immédiatement le type de faute dans le nom de la variable.

En mode non strict, outre le fait qu'aucune erreur ne soit émise et que l'assignation a été effectuée avec succès, le mistypedVaraible sera automatiquement déclaré dans la portée globale en tant que variable globale. Cela implique que le développeur doit rechercher manuellement cette affectation spécifique dans le code.


De plus, en forçant la déclaration de variables, le développeur ne peut pas déclarer accidentellement des variables globales à l’intérieur de fonctions. En mode non strict:

function foo() { 
   a = "bar"; // variable is automatically declared in the global scope
}
foo();
console.log(a); // >> bar

En mode strict, il est nécessaire de déclarer explicitement la variable:

function strict_scope() { 
   "use strict";
   var a = "bar"; // variable is local
}
strict_scope();
console.log(a); // >> "ReferenceError: a is not defined"

La variable peut également être déclarée en dehors et après une fonction, ce qui lui permet d'être utilisée, par exemple, dans la portée globale:

function strict_scope() { 
   "use strict";
   a = "bar"; // variable is global
}
var a;
strict_scope();
console.log(a); // >> bar