Úloha 3 – Rozsah platnosti proměnných (scope)
| Stránky: | Moodle ZČU |
| Kurz: | Sada úloh pro procvičení v předmětu KVD/PGM1P (BP Vítek Dolný) |
| Kniha: | Úloha 3 – Rozsah platnosti proměnných (scope) |
| Vytiskl(a): | Nepřihlášený host |
| Datum: | neděle, 18. října 2026, 17.36 |
Úvod do úlohy
V předchozí části jsme se seznámili s rozdíly mezi var, let a const. Aby však studenti tyto znalosti skutečně pochopili, je nutné je propojit s klíčovým konceptem jazyka JavaScript – rozsahem platnosti proměnných (scope). Scope určuje, kde je proměnná dostupná a odkud ji lze použít. Pokud tento princip nepochopíme, snadno narazíme na chyby, kdy proměnná „není definovaná“ nebo se naopak neočekávaně přepíše.
Teorie a principy
-
Globální rozsah (global scope)
-
Proměnná je dostupná odkudkoliv v kódu.
-
Vytvoří se, když ji deklarujeme mimo funkci nebo blok.
-
Nadměrné používání globálních proměnných se nedoporučuje – mohou kolidovat s jinými částmi kódu.
-
-
Funkční rozsah (function scope)
-
Typický pro proměnné deklarované pomocí
varuvnitř funkce. -
Proměnná existuje pouze v těle funkce, mimo něj není dostupná.
-
-
Blokový rozsah (block scope)
-
Platí pro
letaconst. -
Proměnná je dostupná pouze uvnitř bloku
{ ... }, kde byla deklarována (např. vif,for). -
Mimo blok není viditelná.
-
Praktické příklady kódu
Globální rozsah
Funkční rozsah s var
Blokový rozsah s let a const
Rozdíl mezi var a let v bloku
Typické chyby / záludnosti
-
Neočekávané přepsání proměnné při použití
var– protože ignoruje blokový rozsah. -
Pokus o přístup k proměnné mimo její scope – vede k chybě
ReferenceError. -
Zbytečné používání globálních proměnných – hrozí kolize a nejasný tok dat.
-
Nesprávné pochopení rozdílu mezi funkcí a blokem – funkční scope (
var) vs. blokový scope (let,const).
Shrnutí
-
Globální scope: proměnná je dostupná odkudkoli.
-
Funkční scope: proměnná je dostupná pouze uvnitř funkce (typicky
var). -
Blokový scope: proměnná je dostupná pouze uvnitř bloku
{ ... }(let,const). -
Dnes se doporučuje používat hlavně
letaconst, které respektují blokový rozsah a předcházejí neočekávaným chybám.
Úloha
Zadání (kontext úlohy)
Vytvoř funkci testScope(), ve které deklaruješ proměnnou lokalni pomocí let.
Uvnitř funkce ji vypiš do konzole.
Poté se pokus vypsat stejnou proměnnou mimo funkci.
Cíl úlohy
-
Prověříš si znalost rozsahů proměnných (scope).
-
Uvidíš rozdíl mezi viditelností proměnné uvnitř a vně funkce.
-
Zjistíš chování proměnných deklarovaných v blocích (
if,for, …).
Vstupní podmínky
-
Máš k dispozici HTML dokument propojený s prázdným souborem
script.js. -
Úpravy provádíš pouze v souboru
script.js.
Požadovaný výstup
-
Uvnitř funkce se do konzole správně vypíše hodnota proměnné.
-
Při pokusu o výpis mimo funkci se zobrazí chyba:
ReferenceError: lokalni is not defined
Doplňující pokyny
-
Vyzkoušej také deklaraci proměnné uvnitř bloku
ifa ověř, zda je dostupná mimo tento blok. -
Pamatuj, že
letaconstmají blokový scope, zatímcovarmá funkční scope.
Soubor
Řešení úlohy
Co je zde splněno:
-
Funkce
testScope()deklaruje proměnnoulokalnipomocílet. -
Hodnota je správně vypsána uvnitř funkce.
-
Při pokusu o výpis mimo funkci vzniká chyba ReferenceError.
-
Navíc je ukázáno chování proměnné uvnitř bloku
if.
Poznámky
letaconstjsou vázané na blok, což zvyšuje bezpečnost a předvídatelnost kódu.
varmá pouze funkční scope, takže se někdy chová neočekávaně (proměnná je přístupná i mimo blokif).Typická chyba studentů: myslí si, že proměnná z
ifexistuje i mimo něj – uletaconstto neplatí.