La variable est-elle visible ?
Quel sera le résultat de ce code ?
let x = 1;
function func() {
console.log(x); // ?
let x = 2;
}
func();
P.S. Il y a un piège dans cette tâche. La solution nâest pas évidente.
Le résultat est : error.
Essayez de lâexécuter :
let x = 1;
function func() {
console.log(x); // ReferenceError: Cannot access 'x' before initialization
let x = 2;
}
func();
Dans cet exemple, nous pouvons observer la différence particulière entre une variable ânon existanteâ et une variable ânon initialiséeâ.
Comme vous lâavez peut-être lu dans lâarticle Variable scope, closure, une variable démarre à lâétat ânon initialiséeâ à partir du moment où lâexécution entre dans un bloc de code (ou une fonction). Et elle reste non initialisée jusquâà la déclaration let correspondante.
En dâautres termes, une variable existe techniquement, mais ne peut pas être utilisée avant let.
Le code ci-dessus le démontre.
function func() {
// la variable locale x est connue du moteur depuis le début de la fonction,
// mais "non initialisée" (inutilisable) jusqu'à let ("zone morte")
// d'où l'erreur
console.log(x); // ReferenceError: Cannot access 'x' before initialization
let x = 2;
}
Cette zone dâinutilisabilité temporaire dâune variable (du début du bloc de code jusquâà let) est parfois appelée âdead zoneâ (zone morte).