„Rozsah“ odkazuje na aktuální kontext provádění, ve kterém může váš kód odkazovat nebo „vidět“ hodnoty a výrazy. Proměnné, objekty a funkce z různých částí kódu jsou přístupné na základě jejich rozsahů.
V JavaScriptu mohou mít proměnné, objekty a funkce globální rozsah, rozsah modulu, rozsah bloku nebo rozsah funkce.
Globální rozsah v JavaScriptu
Jakákoli hodnota deklarovaná mimo funkci nebo blok ve skriptu má globální rozsah a má k ní přístup jakýkoli jiný soubor skriptu ve vašem programu.
Například deklarace globální proměnné v jednom souboru:
// index.js
nech globalVariable = "nějakou hodnotu"
Znamená to, že k němu má přístup jakýkoli jiný skript ve vašem programu:
// otherScript.js
řídicí panel.log (globalVariable) // nějakou hodnotu
Deklarace proměnných JavaScriptu v globálním měřítku je to špatná praxe, protože může vést ke znečištění jmenného prostoru. Globální jmenný prostor je horní prostor Javascriptu, který obsahuje proměnné, objekty a funkce. V prohlížeči se připojí k Okno objekt, zatímco NodeJS používá objekt s názvem globální.
Znečištění globálního jmenného prostoru může vést ke kolizi jmen. Toto je situace, ve které se váš kód pokouší použít stejný název proměnné pro různé věci ve stejném jmenném prostoru. Kolize názvů se často vyskytují ve velkých projektech, které využívají několik knihoven třetích stran.
Rozsah modulu
Modul je samostatný soubor, který zapouzdřuje a exportuje části kódu pro použití jinými moduly v projektu. Umožňuje vám efektivněji organizovat a udržovat vaši kódovou základnu.
ES Moduly formalizovány vzor modulu JavaScript v JavaScriptu v roce 2015.
Proměnné, které deklarujete v modulu, jsou vymezeny pro daný modul, což znamená, že k nim nemá přístup žádná jiná část programu.
Proměnnou deklarovanou v modulu mimo něj můžete použít pouze v případě, že modul exportuje tuto proměnnou pomocí vývozní klíčové slovo. Tento název pak můžete importovat do jiného modulu pomocí import klíčové slovo.
Zde je příklad, který ukazuje export třídy:
// index.js
vývoznítřídaFoo{
konstruktér(vlastnost_1, vlastnost_2) {
tento.property_1 = vlastnost_1
tento.property_2 = vlastnost_2
}
}
A takto můžete importovat tento modul a použít vlastnost, kterou exportuje:
// someModule.js
import { Foo } z './index.js'const bar = new Foo('foo', 'bar')
řídicí panel.log (bar.property_1) // foo
Soubory nejsou standardně v JavaScriptu deklarovány jako moduly.
V JavaScriptu na straně klienta můžete skript deklarovat jako modul nastavením typ přisuzovat modul na skript štítek:
<typ skriptu="modul" src="index.js"></script>
V NodeJS můžete deklarovat skript jako modul nastavením typ majetek do modul ve vašem package.json soubor:
{
"typ": "modul"
}
Blokový rozsah
Blok v JavaScriptu je místo, kde začíná a končí dvojice složených závorek.
Proměnné deklarované v bloku s nechat, a konst klíčová slova jsou omezena na tento blok, což znamená, že k nim nemáte přístup mimo něj. Tento rozsah se nevztahuje na proměnné deklarované pomocí var klíčové slovo:
{ // Začátek bloku
konst jedna = '1'
ať dva = '2'
var tři = '3'
} // Konec blokuřídicí panel.log (jeden) // vyvolá chybu
řídicí panel.log (tři) // "3"
Proměnné uzavřené v bloku výše a deklarované jako const nebo let jsou přístupné pouze uvnitř bloku. Můžete však přistupovat k proměnné deklarované pomocí var klíčové slovo mimo blok.
Rozsah funkce
Proměnné deklarované uvnitř funkce se běžně označují jako lokální proměnné a jsou omezeny na funkci. Mimo funkci k nim nemáte přístup. Tento rozsah platí pro proměnné deklarované pomocí var, nechat, a konst klíčová slova.
Vzhledem k tomu, že proměnné deklarované ve funkci jsou pro funkci lokální, lze názvy proměnných znovu použít. Opětovné použití názvů proměnných s rozsahem funkcí je známé jako stínování proměnných a vnější proměnná je označována jako „stínovaná“.
Například:
funkcenásobit() {
nechat jeden = 1
var dva = 2
konst tři = 3vrátit se jedna dvě tři
}
// Variabilní stínování
konst tři = 'tři' // Nevyvolá chybu
Porozumění pravidlům stanovení rozsahu je životně důležité
Pokud budete mít přehled o dostupných rozsahech v JavaScriptu, bude pro vás snazší vyhnout se chybám. Pokus o přístup k proměnné, která je v určitém rozsahu nedostupná, je zralým zdrojem chyb.
Pochopení rozsahu také zahrnuje koncepty, jako je globální znečištění jmenného prostoru, díky kterému je váš kód náchylnější k chybám.