„Rozsah“ označuje aktuálny kontext vykonávania, v ktorom môže váš kód odkazovať alebo „vidieť“ hodnoty a výrazy. Premenné, objekty a funkcie z rôznych častí kódu sú prístupné na základe ich rozsahu.
V JavaScripte môžu mať premenné, objekty a funkcie globálny rozsah, rozsah modulu, rozsah bloku alebo rozsah funkcie.
Globálny rozsah v JavaScripte
Akákoľvek hodnota deklarovaná mimo funkcie alebo bloku v skripte má globálny rozsah a má k nej prístup akýkoľvek iný súbor skriptu vo vašom programe.
Napríklad deklarovanie globálnej premennej v jednom súbore:
// index.js
nech globalVariable = "nejakú hodnotu"
Znamená to, že k nemu môže pristupovať akýkoľvek iný skript vo vašom programe:
// otherScript.js
konzoly.log (globalVariable) // nejaká hodnota
Deklarovanie premenných JavaScriptu v globálnom rozsahu je to zlý postup, pretože môže viesť k znečisteniu menného priestoru. Globálny priestor názvov je najvyšší priestor Javascriptu, ktorý obsahuje premenné, objekty a funkcie. V prehliadači sa pripojí k okno objekt, zatiaľ čo NodeJS používa objekt s názvom globálne.
Znečistenie globálneho menného priestoru môže viesť ku kolízii mien. Toto je situácia, v ktorej sa váš kód pokúša použiť rovnaký názov premennej pre rôzne veci v rovnakom priestore názvov. Kolízie mien sa často vyskytujú vo veľkých projektoch, ktoré využívajú viaceré knižnice tretích strán.
Rozsah modulu
Modul je samostatný súbor, ktorý zapuzdruje a exportuje časti kódu na použitie pre iné moduly v projekte. Umožňuje vám efektívnejšie organizovať a udržiavať vašu kódovú základňu.
Formalizované ES moduly vzor modulu JavaScript v JavaScripte v roku 2015.
Premenné, ktoré deklarujete v module, sa vzťahujú na daný modul, čo znamená, že k nim nemá prístup žiadna iná časť programu.
Premennú deklarovanú v module mimo neho môžete použiť iba vtedy, ak modul exportuje túto premennú pomocou export kľúčové slovo. Potom môžete tento názov importovať do iného modulu pomocou importovať kľúčové slovo.
Tu je príklad, ktorý ukazuje export triedy:
// index.js
exporttriedaFoo{
konštruktér(vlastnosť_1, vlastnosť_2) {
toto.vlastnosť_1 = vlastnosť_1
toto.vlastnosť_2 = vlastnosť_2
}
}
A takto môžete importovať tento modul a použiť vlastnosť, ktorú exportuje:
// someModule.js
importovať { Foo } od './index.js'const bar = new Foo('foo', 'bar')
konzoly.log (bar.property_1) // foo
Súbory nie sú štandardne v JavaScripte deklarované ako moduly.
V JavaScripte na strane klienta môžete skript deklarovať ako modul nastavením typu pripisovať modul na skript značka:
<typ skriptu="modul" src="index.js"></script>
V NodeJS môžete deklarovať skript ako modul nastavením typu majetok do modul v tvojom package.json súbor:
{
"typu": "modul"
}
Blokový rozsah
Blok v JavaScripte je miesto, kde začína a končí pár zložených zátvoriek.
Premenné deklarované v rámci bloku s nech, a konšt kľúčové slová sa vzťahujú na tento blok, čo znamená, že mimo neho k nim nemáte prístup. Tento rozsah sa nevzťahuje na premenné deklarované pomocou var kľúčové slovo:
{ // Začiatok bloku
const one = '1'
nech dvaja = '2'
var tri = '3'
} // Koniec blokukonzoly.log (jeden) // vyhodí chybu
konzoly.log (tri) // "3"
Premenné uzavreté v bloku vyššie a deklarované ako const alebo let sú prístupné iba vo vnútri bloku. Môžete však pristupovať k premennej deklarovanej pomocou var kľúčové slovo mimo bloku.
Rozsah funkcie
Premenné deklarované vo funkcii sa bežne označujú ako lokálne premenné a vzťahujú sa na funkciu. Nemôžete k nim pristupovať mimo funkcie. Tento rozsah sa vzťahuje na premenné deklarované pomocou var, nech, a konšt Kľúčové slová.
Keďže premenné deklarované vo funkcii sú lokálne pre funkciu, názvy premenných je možné znova použiť. Opätovné použitie názvov premenných s rozsahom funkcií je známe ako tieňovanie premenných a vonkajšia premenná sa nazýva „zatienená“.
Napríklad:
funkciumnožiť() {
nech jeden = 1
var dva = 2
konšt tri = 3vrátiť jeden dva tri
}
// Variabilné tienenie
konšt tri = 'tri' // Nevyvolá chybu
Pochopenie pravidiel rozsahu je životne dôležité
Ak budete mať prehľad o dostupných rozsahoch v JavaScripte, bude pre vás jednoduchšie vyhnúť sa chybám. Pokus o prístup k premennej, ktorá nie je v určitom rozsahu k dispozícii, je zrelým zdrojom chýb.
Pochopenie rozsahu zahŕňa aj pojmy ako globálne znečistenie menného priestoru, vďaka čomu je váš kód náchylnejší na chyby.