Úloha 3 – Rozsah platnosti proměnných (scope)
Ú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.