"Ulatusala" viitab praegusele täitmise kontekstile, milles teie kood võib viidata või "näha" väärtusi ja väljendeid. Muutujad, objektid ja funktsioonid koodi erinevatest osadest on juurdepääsetavad nende ulatuse alusel.
JavaScriptis võib muutujatel, objektidel ja funktsioonidel olla globaalne ulatus, mooduli ulatus, ploki ulatus või funktsiooni ulatus.
Globaalne ulatus JavaScriptis
Kõik väärtused, mis on deklareeritud väljaspool funktsiooni või skripti plokki, on globaalse ulatusega ja mis tahes muu teie programmi skriptifail pääseb sellele juurde.
Näiteks globaalse muutuja deklareerimine ühes failis:
// index.js
olgu globalVariable = "mingi väärtus"
Tähendab, et mis tahes muu skript teie programmis pääseb sellele juurde:
// otherScript.js
konsool.log (globaalne muutuja) // mingi väärtus
JavaScripti muutujate deklareerimine globaalses ulatuses on halb tava, sest see võib viia nimeruumi saastamiseni. Globaalne nimeruum on Javascripti ülemine ruum, mis sisaldab muutujaid, objekte ja funktsioone. Brauseris kinnitub see Aken objekt, samas kui NodeJS kasutab objekti nimega globaalne.
Globaalse nimeruumi saastamine võib põhjustada nimede kokkupõrkeid. See on olukord, kus teie kood proovib kasutada sama muutuja nime erinevate asjade jaoks samas nimeruumis. Nimede kokkupõrkeid tuleb sageli ette suurtes projektides, mis kasutavad mitut kolmanda osapoole teeki.
Mooduli ulatus
Moodul on iseseisev fail, mis kapseldab ja ekspordib kooditükke teistele projekti moodulitele kasutamiseks. See võimaldab teil koodibaasi tõhusamalt korraldada ja hooldada.
ES moodulid vormistatud JavaScripti mooduli muster JavaScriptis 2015. aastal.
Muutujad, mille deklareerite moodulis, kuuluvad sellele moodulile, mis tähendab, et ükski teine programmi osa ei pääse neile juurde.
Saate kasutada moodulist väljaspool deklareeritud muutujat ainult siis, kui moodul ekspordib selle muutuja, kasutades eksportida märksõna. Seejärel saate selle nime importida teise moodulisse, kasutades importida märksõna.
Siin on näide, mis näitab klassi eksporti.
// index.js
eksportidaklassFoo{
konstruktor(omadus_1, omadus_2) {
see.property_1 = omadus_1
see.omadus_2 = omadus_2
}
}
Ja siin saate seda moodulit importida ja selle eksporditavat atribuuti kasutada.
// someModule.js
importida { Foo } alates './index.js'const riba = new Foo('foo', 'baar')
konsool.log (bar.property_1) // foo
JavaScriptis ei deklareerita faile vaikimisi moodulitena.
Kliendipoolses JavaScriptis saate skripti deklareerida moodulina, määrates tüüp omistada moodul peal stsenaarium silt:
<skripti tüüp="moodul" src="index.js"></script>
NodeJS-is saate skripti deklareerida moodulina, määrates tüüp vara juurde moodul sinus package.json fail:
{
"tüüp": "moodul"
}
Ploki ulatus
JavaScripti plokk on koht, kus alustavad ja lõpetavad lokkis sulgud.
Muutujad, mis on deklareeritud ploki sees laseja konst märksõnad on selle ploki ulatusega, mis tähendab, et te ei pääse neile juurde väljaspool seda. See ulatus ei kehti muutujatele, mis on deklareeritud kasutades var märksõna:
{ // Ploki algus
const üks = '1'
olgu kaks = '2'
var kolm = '3'
} // Ploki lõppkonsool.log (üks) // viskab vea
konsool.log (kolm) // "3"
Ülaltoodud plokis olevad muutujad, mis on deklareeritud kui const või let, on juurdepääsetavad ainult ploki sees. Siiski saate juurdepääsu muutujale, mis on deklareeritud kasutades var märksõna väljaspool plokki.
Funktsiooni ulatus
Funktsiooni sees deklareeritud muutujaid nimetatakse tavaliselt kohalikeks muutujateks ja need on funktsiooni ulatusega. Te ei pääse neile juurde väljaspool funktsiooni. See ulatus kehtib muutujatele, mis on deklareeritud var, laseja konst märksõnad.
Kuna funktsioonis deklareeritud muutujad on funktsioonile kohalikud, saab muutujate nimesid uuesti kasutada. Funktsiooni ulatusega muutujate nimede taaskasutamist nimetatakse muutujate varjutamiseks ja välimine muutuja on "varjutatud".
Näiteks:
funktsioonikorrutada() {
lase üks = 1
var kaks = 2
konst kolm = 3tagasi üks kaks kolm
}
// Muutuv varjutus
konst kolm = 'kolm' // Ei viska viga
Ulatusreeglite mõistmine on ülioluline
JavaScripti saadaolevate ulatuste mõistmine muudab vigade vältimise lihtsamaks. Püüdes pääseda juurde muutujale, mis pole teatud ulatuses saadaval, on küps vigade allikas.
Ulatuse mõistmine hõlmab ka selliseid mõisteid nagu globaalne nimeruumi saaste, mis võib muuta teie koodi vigadele kalduvamaks.