Zasięg zmiennych w JavaScript
Zadanie 15: Zasięg zmiennych (Scope) w JavaScript
Wstęp
Zanim przejdziemy do zasięgu, przypomnijmy: Zmienna to "pojemnik" na dane, któremu nadajemy nazwę. Pozwala nam ona przechowywać informacje (tekst, liczby, obiekty) i odwoływać się do nich w kodzie.
Zasięg (Scope) określa, w której części Twojego kodu dana zmienna jest "widoczna" i dostępna do użycia. W JavaScript wyróżniamy trzy główne rodzaje zasięgu.
Rodzaje zasięgu
1. Zasięg Globalny (Global Scope)
Zmienna zdefiniowana poza jakąkolwiek funkcją lub blokem kodu. Jest ona dostępna w każdym miejscu Twojego skryptu.
let markaAuta = "Tesla"; // Zmienna globalna
function pokazAuto() {
console.log(markaAuta); // Ma dostęp do globalnej zmiennej
}
2. Zasięg Lokalny / Funkcyjny (Local Scope)
Zmienna zdefiniowana wewnątrz funkcji. Jest ona "zamknięta" w tej funkcji – nie masz do niej dostępu na zewnątrz.
function przygotujKawe() {
let rodzajKawy = "Espresso"; // Zmienna lokalna
console.log(rodzajKawy); // Działa
}
przygotujKawe();
// console.log(rodzajKawy); // BŁĄD! Ta zmienna tutaj nie istnieje.
3. Zasięg Blokowy (Block Scope)
Zmienne tworzone za pomocą let oraz const wewnątrz nawiasów klamrowych { } (np. w instrukcji if lub pętli for) są dostępne tylko wewnątrz tych nawiasów.
if (true) {
let tajneHaslo = "12345"; // Zasięg blokowy
console.log(tajneHaslo);
}
// console.log(tajneHaslo); // BŁĄD! Zmienna let nie wychodzi poza blok { }.
[!IMPORTANT] Stare słowo kluczowe
varnie posiada zasięgu blokowego (ignoruje nawiasy{ }w instrukcjachif), dlatego obecnie zaleca się używanie wyłącznieleticonst.
Zadania do samodzielnego wykonania
Utwórz dokument HTML i wewnątrz tagu <script> rozwiąż poniższe zadania. Obserwuj błędy w konsoli przeglądarki (F12).
- Globalny podróżnik: Stwórz zmienną globalną
miastoo wartości"Bielsko-Biała". Stwórz funkcjępodroz(), która wypisze w konsoli:"Jadę do: "+ miasto. Wywołaj funkcję. - Lokalny sekret: Napisz funkcję
tajnaWiadomosc(). Wewnątrz niej stwórz zmiennąsekreto treści"To jest tajemnica". Spróbuj wypisać tę zmienną za pomocąconsole.log()poza funkcją i zobacz jaki błąd się pojawi. - Bitwa zasięgów: Stwórz zmienną globalną
liczba = 10. Następnie stwórz funkcję, w której stworzysz nową zmienną o tej samej nazwielet liczba = 50. Wypisz ją wewnątrz funkcji i sprawdź, którą wartość pokaże JS. - Blokowa pułapka: Użyj instrukcji
if (true) { ... }. Wewnątrz stwórz zmiennąconst rok = 2024. Spróbuj wypisać ją zaraz po zamknięciu nawiasu klamrowegoif. - Pętla i let: Stwórz pętlę
for (let i = 0; i < 3; i++) { ... }. Wewnątrz pętli wypisuj wartośći. Po zakończeniu pętli spróbuj wypisaćiw konsoli. Wyjaśnij (sobie), dlaczego wynik jest błędem. - Próba nadpisania: Stwórz stałą (
const) globalnąKRAJ = "Polska". W dowolnej funkcji spróbuj przypisać jej nową wartość"Niemcy". Co powie konsola? - Zmienna w funkcji: Napisz funkcję
sumuj(a, b). Wewnątrz stwórz zmiennąwynik = a + b. Wywołaj funkcję, a następnie spróbuj wyświetlićwynikpoza nią. - Wiele bloków: Stwórz dwa oddzielne bloki kodu
{ }jeden po drugim. W każdym z nich stwórz zmiennąlet x = 10. Czy program działa? Czy zmienne o tej samej nazwie w różnych blokach się "gryzą"? - Parametr jako zmienna lokalna: Sprawdź, czy argument funkcji (np.
function test(argument)) jest dostępny poza funkcją. - Refaktoryzacja zasięgu: Masz zmienną globalną
let saldo = 100. Napisz funkcjęzmienSaldo(), która zmieni jej wartość na200. Sprawdź wartośćsaldoprzed wywołaniem funkcji i po jej wywołaniu.
Git Help
git add .
git commit -m "HTML Zadanie 15: Variable Scope concepts"