Portée des variables en JavaScript : var, let, const et fonctions
Bonjour à tous ! Je viens de commencer à apprendre JavaScript et je n'arrive pas à comprendre la portée des variables. J'écris du code simple, mais les résultats me surprennent constamment.
Voici un exemple :
```javascript
var x = 10;
function test() {
var x = 20;
if (true) {
var x = 30;
console.log(x); // affiche 30
}
console.log(x); // affiche 30, pas 20 !
}
test();
console.log(x); // affiche 10
```
Pourquoi à l'intérieur de la fonction `test()` la variable `x` change-t-elle, même si je l'ai déclarée avec `var` dans le bloc `if` ? Je pensais que `var` était limité à la fonction, mais ici il se comporte étrangement. J'ai aussi entendu parler de `let` et `const`, mais je ne comprends pas en quoi ils diffèrent.
Un autre exemple avec les closures :
```javascript
for (var i = 0; i < 3; i++) {
setTimeout(function() {
console.log(i); // affiche 3, 3, 3
}, 100);
}
```
Pourquoi les trois appels affichent-ils 3, et non 0, 1, 2 ? Je m'attendais à ce que chaque appel de setTimeout se souvienne de sa propre valeur de i. Expliquez-moi, s'il vous plaît, comment cela fonctionne.