Sobes.tech
Junior

Care sunt modalitățile de a declara variabile în JavaScript? Menționați diferențele dintre aceste metode.

sobes.tech AI

Răspuns de la AI

În JavaScript, variabilele pot fi declarate în trei moduri: var, let, const.

Diferențele dintre ele:

Diferență var let const
Domeniu Funcțional Bloc Bloc
Redefinire Posibil Posibil Imposibil
Reatributare Posibil Posibil Imposibil
Hoisting Ridică declarația și inițializarea la undefined Ridică declarația, dar nu inițializarea Ridică declarația, dar nu inițializarea

Exemple:

// var
function exempluVar() {
  var x = 10; // Domeniu funcțional
  if (true) {
    var x = 20; // Redefinire posibilă în aceeași funcție
    console.log(x); // 20
  }
  console.log(x); // 20 (variabila x din if este accesibilă aici)
}

console.log(x); // Eroare: ReferenceError: x nu este definit (x nu este vizibil în afara funcției)

// Hoisting cu var
console.log(a); // undefined
var a = 5;
console.log(a); // 5
// let
function exempluLet() {
  let y = 10; // Domeniu de bloc
  if (true) {
    let y = 20; // Redefinire nu posibilă în același bloc
    console.log(y); // 20 (alt y)
  }
  console.log(y); // 10 (variabila y în afara blocului)
}

console.log(y); // Eroare: ReferenceError: y nu este definit

// Hoisting cu let
// console.log(b); // Eroare: ReferenceError: Nu se poate accesa 'b' înainte de inițializare
let b = 5;
console.log(b); // 5
// const
function exempluConst() {
  const z = 10; // Domeniu de bloc
  // z = 20; // Eroare: TypeError: Atribuire la variabilă constantă. (Reatributare imposibilă)
  if (true) {
    const z = 20; // Redefinire nu posibilă în același bloc
    console.log(z); // 20 (alt z)
  }
  console.log(z); // 10 (variabila z în afara blocului)
}

console.log(z); // Eroare: ReferenceError: z nu este definit

// Hoisting cu const
// console.log(c); // Eroare: ReferenceError: Nu se poate accesa 'c' înainte de inițializare
const c = 5;
console.log(c); // 5

// Pentru obiecte și array-uri declarate cu const, conținutul poate fi modificat
const obj = { nume: 'Test' };
obj.nume = 'Test Nou'; // Permis
// obj = { nume: 'Alt Test' }; // Eroare