En Python, une fonction peut lire une variable globale, mais pas la modifier sans global.
En JS, c'est plus permissif, mais il y a des règles.
Scope de Bloc (avec let et const)
Une variable existe uniquement dans les accolades {} où elle est née.
if (true) {
const secret = "Code42";
}
// console.log(secret); -> ERREUR ! ReferenceError
Closures (Fermetures)
C'est un concept clé. Une fonction "se souvient" des variables qui existaient à sa création, même si la fonction parente a fini de s'exécuter.
const creerCompteur = () => {
let count = 0; // Cette variable devrait mourir à la fin de la fonction...
return () => {
count++; // ... mais cette fonction interne la garde en vie !
console.log(count);
};
};
const monCompteur = creerCompteur();
monCompteur(); // 1
monCompteur(); // 2
C'est comme l'encapsulation (attributs privés) en POO, mais avec des fonctions.