Sobes.tech
Junior

Na koje načine možete deklarisati promenljive u JavaScript-u? Navedite razlike između ovih metoda.

sobes.tech АИ

Одговор од АИ

У JavaScript-u možete deklarisati promenljive na tri načina: var, let, const.

Razlike između njih:

Razlika var let const
Opseg vidljivosti Funkcionalni Blokovski Blokovski
Prepisivanje Moguće Moguće Nije moguće
Hoisting Podiže deklaraciju i inicijalizaciju na undefined Podiže deklaraciju, ali ne i inicijalizaciju Podiže deklaraciju, ali ne i inicijalizaciju

Primeri:

// var
function exampleVar() {
  var x = 10; // Funkcionalni opseg
  if (true) {
    var x = 20; // Moguće je prepisivanje unutar iste funkcije
    console.log(x); // 20
  }
  console.log(x); // 20 (promenljiva x iz if je dostupna ovde)
}

console.log(x); // Greška: ReferenceError: x nije definisana (x nije vidljiva izvan funkcije)

// Hoisting var
console.log(a); // undefined
var a = 5;
console.log(a); // 5
// let
function exampleLet() {
  let y = 10; // Blokovski opseg
  if (true) {
    let y = 20; // Moguće je prepisivanje unutar istog bloka
    console.log(y); // 20 (druga promenljiva y)
  }
  console.log(y); // 10 (promenljiva y izvan bloka)
}

console.log(y); // Greška: ReferenceError: y nije definisana

// Hoisting let
// console.log(b); // Greška: ReferenceError: Ne može pristupiti 'b' pre inicijalizacije
let b = 5;
console.log(b); // 5
// const
function exampleConst() {
  const z = 10; // Blokovski opseg
  // z = 20; // Greška: TypeError: Dodeljivanje konstantnoj promenljivoj. (Prepisivanje nije moguće)
  if (true) {
    const z = 20; // Moguće je prepisivanje unutar istog bloka
    console.log(z); // 20 (druga promenljiva z)
  }
  console.log(z); // 10 (promenljiva z izvan bloka)
}

console.log(z); // Greška: ReferenceError: z nije definisana

// Hoisting const
// console.log(c); // Greška: ReferenceError: Ne može pristupiti 'c' pre inicijalizacije
const c = 5;
console.log(c); // 5

// Za objekte i nizove deklarisane putem const, sadržaj se može menjati
const obj = { ime: 'Test' };
obj.ime = 'Novi Test'; // Dozvoljeno
// obj = { ime: 'Drugi Test' }; // Greška