ReferenceError: assignment to undeclared variable "x"

Message

ReferenceError: assignment to undeclared variable "x" (Firefox)
ReferenceError: "x" is not defined (Chrome)
ReferenceError: Variable undefined in strict mode (Edge)

Type d'erreur

Une erreur ReferenceError, uniquement en mode strict.

Quel est le problĂšme ?

Une valeur a été affectée à une variable non-déclarée. Autrement dit, il y a eu une affectation qui n'utilise pas le mot-clé var. Il existe certaines différences entre les variables déclarées et les variables non déclarées ce qui peut entraßner des résultats étranges. C'est pour cette raison que le moteur affiche une erreur en mode strict.

Trois choses à noter lorsqu'on évoque les variables déclarées/non déclarées :

  • Les variables dĂ©clarĂ©es sont contraintes dans le contexte d'exĂ©cution dans lequel elles sont dĂ©clarĂ©es. Les variables non dĂ©clarĂ©es sont toujours globales.
  • Les variables dĂ©clarĂ©es sont crĂ©Ă©es avant que le code soit exĂ©cutĂ©. Les variables non dĂ©clarĂ©es n'existent pas tant que le code qui leur est affectĂ© est exĂ©cutĂ©.
  • Les variables dĂ©clarĂ©es sont des propriĂ©tĂ©s non-configurables de leur contexte d'exĂ©cution (la fonction ou l'espace global). Les variables non-dĂ©clarĂ©es sont configurables (elles peuvent ĂȘtre supprimĂ©es).

Pour plus de détails et d'exemple, se référer à la page sur var.

Les erreurs à propos des affectations sur les variables non déclarées se produisent uniquement en mode strict. En mode non-strict, elles sont ignorées silencieusement.

Exemples

Exemples invalides

Ici, la variable truc n'est pas déclarée :

function toto() {
  "use strict";
  truc = true;
}
toto(); // ReferenceError: assignment to undeclared variable truc

Exemples valides

Afin de déclarer truc, on peut ajouter le mot-clé var devant.

function toto() {
  "use strict";
  var truc = true;
}
toto();

Voir aussi