Junior
Quelles sont les façons de déclarer des variables en JavaScript ? Nommez les différences entre ces méthodes.
sobes.tech IA
Réponse de l'IA
En JavaScript, les variables peuvent être déclarées de trois manières : var, let, const.
Différences entre elles :
| Différence | var |
let |
const |
|---|---|---|---|
| Portée | Fonctionnelle | Bloc | Bloc |
| Redéclaration | Possible | Possible | Impossible |
| Réaffectation | Possible | Possible | Impossible |
| Hoisting | Éléve la déclaration et l'initialisation à undefined |
Éléve la déclaration, mais pas l'initialisation | Éléve la déclaration, mais pas l'initialisation |
Exemples :
// var
function exempleVar() {
var x = 10; // Portée fonctionnelle
if (true) {
var x = 20; // Redéclaration possible dans la même fonction
console.log(x); // 20
}
console.log(x); // 20 (la variable x du if est accessible ici)
}
console.log(x); // Erreur : ReferenceError : x n'est pas défini (x n'est pas visible en dehors de la fonction)
// Hoisting avec var
console.log(a); // undefined
var a = 5;
console.log(a); // 5
// let
function exempleLet() {
let y = 10; // Portée de bloc
if (true) {
let y = 20; // Redéclaration non possible dans le même bloc
console.log(y); // 20 (autre variable y)
}
console.log(y); // 10 (variable y hors du bloc)
}
console.log(y); // Erreur : ReferenceError : y n'est pas défini
// Hoisting avec let
// console.log(b); // Erreur : ReferenceError : Impossible d'accéder à 'b' avant l'initialisation
let b = 5;
console.log(b); // 5
// const
function exempleConst() {
const z = 10; // Portée de bloc
// z = 20; // Erreur : TypeError : Attribution à une variable constante. (Réaffectation impossible)
if (true) {
const z = 20; // Redéclaration non possible dans le même bloc
console.log(z); // 20 (autre variable z)
}
console.log(z); // 10 (variable z hors du bloc)
}
console.log(z); // Erreur : ReferenceError : z n'est pas défini
// Hoisting avec const
// console.log(c); // Erreur : ReferenceError : Impossible d'accéder à 'c' avant l'initialisation
const c = 5;
console.log(c); // 5
// Pour les objets et tableaux déclarés avec const, leur contenu peut être modifié
const obj = { name: 'Test' };
obj.name = 'Nouveau Test'; // Permis
// obj = { name: 'Autre Test' }; // Erreur