Sobes.tech
Junior

Akými spôsobmi je možné deklarovať premenné v JavaScripte? Uveďte rozdiely medzi týmito spôsobmi.

sobes.tech AI

Odpoveď od AI

V JavaScripte môžete deklarovať premenné tromi spôsobmi: var, let, const.

Rozdiely medzi nimi:

Rozdiel var let const
Rozsah platnosti Funkčný Blokový Blokový
Prepisovanie Je možné Je možné Nie je možné
Hoisting Zdvihá deklaráciu a inicializáciu na undefined Zdvihá deklaráciu, ale nie inicializáciu Zdvihá deklaráciu, ale nie inicializáciu

Príklady:

// var
function exampleVar() {
  var x = 10; // Funkčný rozsah platnosti
  if (true) {
    var x = 20; // Prepisovanie je možné v rámci tej istej funkcie
    console.log(x); // 20
  }
  console.log(x); // 20 (premenná x z if je dostupná tu)
}

console.log(x); // Chyba: ReferenceError: x nie je definovaná (x nie je viditeľná mimo funkcie)

// 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; // Prepisovanie nie je možné v rámci toho istého bloku
    console.log(y); // 20 (iná premená y)
  }
  console.log(y); // 10 (premenná y mimo bloku)
}

console.log(y); // Chyba: ReferenceError: y nie je definovaná

// Hoisting let
// console.log(b); // Chyba: ReferenceError: Nie je možné pristúpiť k 'b' pred inicializáciou
let b = 5;
console.log(b); // 5
// const
function exampleConst() {
  const z = 10; // Blokový rozsah platnosti
  // z = 20; // Chyba: TypeError: Priradenie ku konštantnej premennej. (Prepisovanie nie je možné)
  if (true) {
    const z = 20; // Prepisovanie nie je možné v rámci toho istého bloku
    console.log(z); // 20 (iná premená z)
  }
  console.log(z); // 10 (premenná z mimo bloku)
}

console.log(z); // Chyba: ReferenceError: z nie je definovaná

// Hoisting const
// console.log(c); // Chyba: ReferenceError: Nie je možné pristúpiť k 'c' pred inicializáciou
const c = 5;
console.log(c); // 5

// Pre objekty a polia deklarované cez const je možné meniť obsah
const obj = { meno: 'Test' };
obj.meno = 'Nový Test'; // Povolené
// obj = { meno: 'Iný Test' }; // Chyba