Avatar ·

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.