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