Sobes.tech
Junior

In che modi è possibile dichiarare variabili in JavaScript? Nomina le differenze tra questi metodi.

sobes.tech AI

Risposta dell'AI

In JavaScript, le variabili possono essere dichiarate in tre modi: var, let, const.

Differenze tra loro:

Differenza var let const
Ambito Funzionale Blocca Blocca
Riassegnazione Possibile Possibile Impossibile
Riassegnazione Possibile Possibile Impossibile
Hoisting Solleva la dichiarazione e l'inizializzazione a undefined Solleva la dichiarazione, ma non l'inizializzazione Solleva la dichiarazione, ma non l'inizializzazione

Esempi:

// var
function esempioVar() {
  var x = 10; // Ambito funzionale
  if (true) {
    var x = 20; // Riassegnazione possibile all'interno della stessa funzione
    console.log(x); // 20
  }
  console.log(x); // 20 (la variabile x del if è accessibile qui)
}

console.log(x); // Errore: ReferenceError: x non è definito (x non visibile fuori dalla funzione)

// Hoisting con var
console.log(a); // undefined
var a = 5;
console.log(a); // 5
// let
function esempioLet() {
  let y = 10; // Ambito di blocco
  if (true) {
    let y = 20; // Riassegnazione non possibile all'interno dello stesso blocco
    console.log(y); // 20 (è un'altra variabile y)
  }
  console.log(y); // 10 (variabile y fuori dal blocco)
}

console.log(y); // Errore: ReferenceError: y non è definito

// Hoisting con let
// console.log(b); // Errore: ReferenceError: Impossibile accedere a 'b' prima dell'inizializzazione
let b = 5;
console.log(b); // 5
// const
function esempioConst() {
  const z = 10; // Ambito di blocco
  // z = 20; // Errore: TypeError: Assegnazione a variabile costante. (Impossibile riassegnare)
  if (true) {
    const z = 20; // Riassegnazione non possibile all'interno dello stesso blocco
    console.log(z); // 20 (un'altra variabile z)
  }
  console.log(z); // 10 (variabile z fuori dal blocco)
}

console.log(z); // Errore: ReferenceError: z non è definito

// Hoisting con const
// console.log(c); // Errore: ReferenceError: Impossibile accedere a 'c' prima dell'inizializzazione
const c = 5;
console.log(c); // 5

// Per oggetti e array dichiarati con const, è possibile modificare il contenuto
const obj = { name: 'Test' };
obj.name = 'Nuovo Test'; // Permesso
// obj = { name: 'Altro Test' }; // Errore