Sobes.tech
Junior

Jakými způsoby lze v JavaScriptu deklarovat proměnné? Uveďte rozdíly mezi těmito způsoby.

sobes.tech AI

Odpověď od AI

V JavaScriptu lze proměnné deklarovat třemi způsoby: var, let, const.

Rozdíly mezi nimi:

Rozdíl var let const
Rozsah platnosti Funkční Blokový Blokový
Překrývání Je možné Je možné Není možné
Přepisování Je možné Je možné Není možné
Hoisting Zvedá deklaraci a inicializaci na undefined Zvedá deklaraci, ale ne inicializaci Zvedá deklaraci, ale ne inicializaci

Příklady:

// var
function exampleVar() {
  var x = 10; // Funkční rozsah platnosti
  if (true) {
    var x = 20; // Překrývání je možné uvnitř téže funkce
    console.log(x); // 20
  }
  console.log(x); // 20 (proměnná x z if je dostupná zde)
}

console.log(x); // Chyba: ReferenceError: x není definováno (x není viditelná mimo funkci)

// Hoisting var
console.log(a); // undefined
var a = 5;
console.log(a); // 5
// let
function exampleLet() {
  let y = 10; // Blokový rozsah platnosti
  if (true) {
    let y = 20; // Překrývání není možné uvnitř stejného bloku
    console.log(y); // 20 (jiná proměnná y)
  }
  console.log(y); // 10 (proměnná y mimo blok)
}

console.log(y); // Chyba: ReferenceError: y není definováno

// Hoisting let
// console.log(b); // Chyba: ReferenceError: Nelze přistoupit k 'b' před inicializací
let b = 5;
console.log(b); // 5
// const
function exampleConst() {
  const z = 10; // Blokový rozsah platnosti
  // z = 20; // Chyba: TypeError: Přiřazení do konstantní proměnné. (Přepsání není možné)
  if (true) {
    const z = 20; // Překrývání není možné uvnitř stejného bloku
    console.log(z); // 20 (jiná proměnná z)
  }
  console.log(z); // 10 (proměnná z mimo blok)
}

console.log(z); // Chyba: ReferenceError: z není definováno

// Hoisting const
// console.log(c); // Chyba: ReferenceError: Nelze přistoupit k 'c' před inicializací
const c = 5;
console.log(c); // 5

// U objektů a polí deklarovaných přes const lze měnit obsah
const obj = { jméno: 'Test' };
obj.jméno = 'Nový Test'; // Povolené
// obj = { jméno: 'Další Test' }; // Chyba