W JavaScript, deklaracje zmiennych mogą być dokonywane przy użyciu var, let oraz const. Chociaż var była stosowana przez wiele lat, ES6 (ECMAScript 2015) wprowadziło let i const, oferując bardziej elastyczne i bezpieczne sposoby deklarowania zmiennych. Kluczowe różnice między let a var dotyczą zakresu działania (scope), podnoszenia (hoisting) oraz tworzenia bloku kodu.
Przykład z var i let
Aby zilustrować różnice, przygotujmy prosty kod HTML i JavaScript, który pokaże, jak var i let zachowują się w różnych kontekstach.
<!DOCTYPE html>
<html>
<head>
<title>Różnica między let a var</title>
</head>
<body>
<script>
// Przykład z użyciem var
var x = 1;
if (true) {
var x = 2; // x tutaj nadpisuje x z zewnątrz bloku
console.log("Wewnątrz bloku z var: ", x); // Wyświetla 2
}
console.log("Na zewnątrz bloku z var: ", x); // Wyświetla również 2
// Przykład z użyciem let
let y = 1;
if (true) {
let y = 2; // y tutaj jest nową zmienną, niezależną
// od y z zewnątrz bloku
console.log("Wewnątrz bloku z let: ", y); // Wyświetla 2
}
console.log("Na zewnątrz bloku z let: ", y); // Wyświetla 1
</script>
</body>
</html>
Różnice w szczegółach
- Zakres działania (
scope):varma zakres funkcji (function scope), co oznacza, że zmienna zadeklarowana za pomocąvarjest dostępna w całej funkcji, w której została zdefiniowana, oraz w mniejszych zakresach wewnątrz tej funkcji.letma zakres blokowy (block scope), co oznacza, że jest dostępna tylko w bloku, w którym została zadeklarowana, np. w pętli lub instrukcji warunkowej.
- Hoisting:
- Zmienne zadeklarowane za pomocą
varsą “podnoszone” na górę funkcji lub skryptu (ich deklaracja jest przenoszona na początek zakresu, ale nie inicjalizacja). letrównież podlega hoistingowi, ale w przeciwieństwie dovar, nie jest inicjalizowana do momentu jej deklaracji. Oznacza to, że dostęp do zmiennejletprzed jej deklaracją spowoduje błądReferenceError.
- Zmienne zadeklarowane za pomocą
- Tworzenie bloku kodu:
- Zmienne zadeklarowane przez
letmogą być użyte do definiowania zmiennych w bloku kodu, co pomaga uniknąć problemów związanych z nadpisaniem wartości w przypadku złożonych funkcji i operacji logicznych.
- Zmienne zadeklarowane przez
Podsumowanie
Różnica między let a var ma kluczowe znaczenie dla pisania czystego i przewidywalnego kodu w JavaScript. Użycie let zamiast var może pomóc w uniknięciu wielu błędów związanych z zakresem zmiennych, szczególnie w dużych i złożonych aplikacjach. Zrozumienie tych różnic jest fundamentalne dla nowoczesnego programowania w JavaScript.
