Le sujet des variables en JavaScript paraît “facile”.
Mais dans les grands projets, c’est l’une des sources d’erreurs les plus fréquentes.
Parce que le vrai problème n’est pas :
« Définir une variable »,
mais
« Garder une variable au bon endroit. »
Aujourd’hui, nous allons explorer :
- La psychologie de
var,letetconst - Les règles cachées du scope
- Les pièges du hoisting
- Comment les professionnels les utilisent réellement
En profondeur — mais de manière amusante.
1️⃣ Qu’est-ce qu’une variable ? (Plus qu’une simple boîte 📦)
Au niveau le plus simple :
let name = "Cansu";
Mais dans le “cerveau” du moteur JavaScript, voici ce qui se passe :
- Un espace mémoire est alloué.
- Une référence nommée « name » est créée.
- La valeur est attachée à cette référence.
Donc une variable est en réalité :
Un surnom pour une adresse mémoire.
Prouvons-le.
let a = 10;
let b = a;
b = 20;
console.log(a); // ?
console.log(b); // ?
Résultat :
10
20
Pourquoi ?
Parce que les valeurs primitives (number, string, boolean) sont copiées.
Essayons maintenant avec un objet :
let user1 = { name: "Cansu" };
let user2 = user1;
user2.name = "Ahmet";
console.log(user1.name); // ?
Résultat :
Ahmet
Ici, la logique des références entre en jeu.
Les objets ne sont pas copiés — la référence est partagée.
🎯 Astuce pro :
Pour copier correctement un objet, utilisez l’opérateur spread :
let user2 = { ...user1 };
2️⃣ var : Le vétéran… mais dangereux 🧨
var a une portée de fonction.
Il n’a PAS de portée de bloc.
Testons :
if (true) {
var message = "Hello world";
}
console.log(message);
Ça fonctionne.
Essayons quelque chose de plus complexe :
for (var i = 0; i < 3; i++) {
setTimeout(() => {
console.log(i);
}, 1000);
}
Résultat ?
3
3
3
Pourquoi pas 0, 1, 2 ?
Parce que :
varn’est pas limité au bloc.- Il n’y a qu’UN seul
i. - À la fin de la boucle,
i = 3. - Lorsque le timeout s’exécute, ils voient tous la même valeur.
Essayons avec let :
for (let i = 0; i < 3; i++) {
setTimeout(() => {
console.log(i);
}, 1000);
}
Résultat :
0
1
2
Pourquoi ?
Parce que chaque itération crée un nouveau scope de bloc.
🔥 Cette différence évite des bugs critiques en production.
3️⃣ let : L’organisateur moderne 🧠
let a une portée de bloc.
Exemple :
let number = 10;
if (true) {
let number = 20;
console.log("Dans le bloc :", number);
}
console.log("Global :", number);
Résultat :
Dans le bloc : 20
Global : 10
Cela signifie :
Deux variables portant le même nom existent.
Elles vivent dans des scopes différents.
🎯 Astuce :
Dans les grands projets, ce comportement doit être utilisé avec précaution.
Sinon, le “shadowing” peut créer de la confusion.
4️⃣ const : Fidèle… mais via les références 💍
Utilisation simple :
const pi = 3.14;
Mais voici où cela devient intéressant :
const user = {
name: "Cansu"
};
user.name = "Ahmet";
console.log(user.name);
Cela fonctionne.
Parce que :
constverrouille la référence.- Pas le contenu.
Mais vous ne pouvez pas faire :
user = {};
Erreur.
🎯 Habitude professionnelle :
- Utilisez
constpour tout ce qui n’a pas besoin d’être réassigné. - Cela rend votre code plus prévisible.
- Cela évite les réassignations accidentelles.
5️⃣ Types de Scope (La géographie du code 🌍)
🌎 Scope global
let siteName = "CodeWorld";
function print() {
console.log(siteName);
}
print();
Les variables globales sont accessibles partout.
Mais danger :
let counter = 0;
Si c’est global, n’importe quel fichier peut le modifier.
🔥 Dans les grands projets, gardez le global au minimum.
🏠 Scope de fonction
function calculate() {
let result = 10 * 2;
return result;
}
console.log(result); // Erreur
Les variables définies dans une fonction ne peuvent pas en sortir.
C’est une bonne chose.
Cela fournit de l’encapsulation.
🧱 Scope de bloc
{
let secret = "Only here";
}
console.log(secret); // Erreur
C’est particulièrement important dans les blocs :
- if
- for
- while
- switch
6️⃣ Hoisting : La fonctionnalité sournoise de JavaScript 🕵️
Avec var :
console.log(a);
var a = 5;
JavaScript interprète cela ainsi :
var a;
console.log(a);
a = 5;
Résultat :
undefined
Avec let :
console.log(b);
let b = 10;
Erreur.
Parce que b se trouve dans la TDZ (Temporal Dead Zone).
TDZ = Zone interdite jusqu’à la déclaration 🚫
🎯 C’est en réalité un mécanisme de sécurité.
7️⃣ Scénario réel : Système de connexion 🔐
const username = "Cansu";
let loginCount = 0;
function login() {
loginCount++;
console.log(`${username} logged in.`);
console.log(`Total logins: ${loginCount}`);
}
login();
login();
Décisions conscientes ici :
- Le nom d’utilisateur ne change pas →
const - Le compteur augmente →
let - La fonction assure l’encapsulation
Architecture propre.
8️⃣ Les plus grandes erreurs de scope 🚨
❌ Tout rendre global
❌ Utiliser var dans du code asynchrone
❌ Penser que const rend les objets immuables
❌ Ignorer le shadowing
9️⃣ Habitude de codage professionnelle
Règle :
- Par défaut, utilisez
const - Utilisez
letsi une réassignation est nécessaire - Évitez
varsauf nécessité absolue
Et posez-vous toujours la question :
Cette variable a-t-elle vraiment sa place ici ?
🔥 Conclusion
La maîtrise en JavaScript ne consiste pas à :
Écrire des variables.
Mais à comprendre :
- Où elles naissent
- Où elles meurent
- Avec quoi elles interagissent
Gestion du scope = Architecture propre
Utilisation de const = Code sûr
Contrôle avec let = Structure flexible
Les vrais développeurs n’écrivent pas simplement des variables.
Ils les gèrent.
