Sobes.tech
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