Sobes.tech
Junior

Jakimi sposobami można zadeklarować zmienne w JavaScript? Wymień różnice między tymi metodami.

sobes.tech AI

Odpowiedź od AI

W JavaScript zmienne można deklarować na trzy sposoby: var, let, const.

Różnice między nimi:

Różnica var let const
Zakres Funkcyjny Blokowy Blokowy
Ponowne deklarowanie Możliwe Możliwe Niemożliwe
Przypisanie ponowne Możliwe Możliwe Niemożliwe
Hoisting Podnosi deklarację i inicjalizację do undefined Podnosi deklarację, ale nie inicjalizację Podnosi deklarację, ale nie inicjalizację

Przykłady:

// var
function przykladVar() {
  var x = 10; // Zakres funkcji
  if (true) {
    var x = 20; // Ponowne deklarowanie w tej samej funkcji możliwe
    console.log(x); // 20
  }
  console.log(x); // 20 (zmienna x z if jest dostępna tutaj)
}

console.log(x); // Błąd: ReferenceError: x nie jest zdefiniowane (x nie jest widoczne poza funkcją)

// Hoisting z var
console.log(a); // undefined
var a = 5;
console.log(a); // 5
// let
function przykladLet() {
  let y = 10; // Zakres blokowy
  if (true) {
    let y = 20; // Ponowne deklarowanie w tym samym bloku nie jest możliwe
    console.log(y); // 20 (inna zmienna y)
  }
  console.log(y); // 10 (zmienna y spoza bloku)
}

console.log(y); // Błąd: ReferenceError: y nie jest zdefiniowane

// Hoisting z let
// console.log(b); // Błąd: ReferenceError: Nie można uzyskać dostępu do 'b' przed inicjalizacją
let b = 5;
console.log(b); // 5
// const
function przykladConst() {
  const z = 10; // Zakres blokowy
  // z = 20; // Błąd: TypeError: Przypisanie do stałej zmiennej. (Nie można ponownie przypisać)
  if (true) {
    const z = 20; // Ponowne deklarowanie w tym samym bloku nie jest możliwe
    console.log(z); // 20 (inna zmienna z)
  }
  console.log(z); // 10 (zmienna z spoza bloku)
}

console.log(z); // Błąd: ReferenceError: z nie jest zdefiniowane

// Hoisting z const
// console.log(c); // Błąd: ReferenceError: Nie można uzyskać dostępu do 'c' przed inicjalizacją
const c = 5;
console.log(c); // 5

// Dla obiektów i tablic zadeklarowanych jako const, można modyfikować ich zawartość
const ob = { name: 'Test' };
ob.name = 'Nowy Test'; // Dozwolone
// ob = { name: 'Inny Test' }; // Błąd