“Tvērums” attiecas uz pašreizējo izpildes kontekstu, kurā jūsu kods var atsaukties vai “skatīt” vērtības un izteiksmes. Mainīgie, objekti un funkcijas no dažādām koda daļām ir pieejami, pamatojoties uz to darbības jomu.

Programmā JavaScript mainīgajiem, objektiem un funkcijām var būt globāls tvērums, moduļa tvērums, bloka darbības joma vai funkciju tvērums.

Globālā joma JavaScript

Jebkurai vērtībai, kas deklarēta ārpus funkcijas vai skripta bloka, ir globāls apjoms, un tai var piekļūt jebkurš cits jūsu programmas skripta fails.

Piemēram, globālā mainīgā deklarēšana vienā failā:

// index.js
let globalVariable = "kāda vērtība"

Nozīmē, ka jebkurš cits jūsu programmas skripts tam var piekļūt:

// otherScript.js
konsole.log (globāls mainīgais) // kāda vērtība

JavaScript mainīgo deklarēšana globālā mērogā ir slikta prakse, jo tā var izraisīt nosaukumu telpas piesārņojumu. Globālā nosaukumtelpa ir Javascript augšējā telpa, kurā ir mainīgie, objekti un funkcijas. Pārlūkprogrammā tas tiek pievienots Logs objekts, savukārt NodeJS izmanto objektu ar nosaukumu globāli.

Globālās nosaukumtelpas piesārņošana var izraisīt vārdu sadursmi. Šī ir situācija, kad jūsu kods mēģina izmantot vienu un to pašu mainīgā nosaukumu dažādām lietām tajā pašā nosaukumvietā. Vārdu sadursmes bieži rodas lielos projektos, kuros tiek izmantotas vairākas trešo pušu bibliotēkas.

Moduļa darbības joma

Modulis ir atsevišķs fails, kas iekapsulē un eksportē koda daļas citiem projekta moduļiem. Tas ļauj efektīvāk organizēt un uzturēt kodu bāzi.

ES moduļi formalizēti JavaScript moduļa modelis JavaScript 2015. gadā.

Modulī deklarētie mainīgie tiek attiecināti uz šo moduli, kas nozīmē, ka neviena cita programmas daļa nevar tiem piekļūt.

Varat izmantot tikai mainīgo, kas deklarēts modulī ārpus tā, ja modulis eksportē šo mainīgo, izmantojot eksportēt atslēgvārds. Pēc tam varat importēt šo nosaukumu citā modulī, izmantojot imports atslēgvārds.

Tālāk ir sniegts piemērs, kas parāda klases eksportēšanu.

// index.js
eksportētklasēFoo{
konstruktors(īpašums_1, īpašums_2) {
šis.property_1 = īpašums_1
šis.property_2 = īpašums_2
}
}

Tālāk ir norādīts, kā jūs varat importēt šo moduli un izmantot tā eksportēto īpašumu:

// someModule.js
imports {Foo} no './index.js'

const josla = new Foo('foo', 'bārs')

konsole.log (bar.property_1) // foo

Pēc noklusējuma JavaScript programmā faili netiek deklarēti kā moduļi.

Klienta puses JavaScript varat deklarēt skriptu kā moduli, iestatot veids piedēvēt modulis uz skripts tags:

<skripta veids ="modulis" src="index.js"></script>

Programmā NodeJS skriptu var deklarēt kā moduli, iestatot veids īpašumu uz modulis tavā pack.json fails:

{
"veids": "modulis"
}

Bloka darbības joma

JavaScript bloks ir vieta, kur sākas un beidzas cirtainu iekavu pāris.

Mainīgie, kas deklarēti blokā ar ļaut, un konst atslēgvārdi ir ietverti šajā blokā, kas nozīmē, ka jūs nevarat tiem piekļūt ārpus tā. Šī joma neattiecas uz mainīgajiem lielumiem, kas deklarēti, izmantojot var atslēgvārds:

{ // Bloka sākums
const one = '1'
lai divi = '2'
var trīs = '3'
} // Bloka beigas

konsole.log (viens) // izmet kļūdu

konsole.log (trīs) // "3"

Mainīgie lielumi, kas ietverti iepriekš esošajā blokā un deklarēti kā const vai let, ir pieejami tikai blokā. Tomēr jūs varat piekļūt mainīgajam, kas deklarēts, izmantojot var atslēgvārds ārpus bloka.

Funkciju darbības joma

Funkcijā deklarētie mainīgie parasti tiek saukti par vietējiem mainīgajiem un tiek attiecināti uz funkciju. Jūs nevarat tiem piekļūt ārpus funkcijas. Šī joma attiecas uz mainīgajiem, kas deklarēti ar var, ļaut, un konst atslēgvārdi.

Tā kā funkcijā deklarētie mainīgie ir lokāli funkcijai, mainīgo nosaukumus var izmantot atkārtoti. Funkciju tvēruma mainīgo nosaukumu atkārtota izmantošana ir pazīstama kā mainīgo ēnošana, un tiek uzskatīts, ka ārējais mainīgais ir “ēnots”.

Piemēram:

funkcijuvairoties() {
ļaut viens = 1
var divi = 2
konst trīs = 3

atgriezties viens divi trīs
}

// Mainīga ēnošana
konst trīs = 'trīs' // Neizmet kļūdu

Izpratne par darbības jomas noteikumiem ir ļoti svarīga

Pārzinot pieejamos JavaScript tvērumus, varat vieglāk izvairīties no kļūdām. Mēģinājums piekļūt mainīgajam, kas nav pieejams noteiktā tvērumā, ir nobriedis kļūdu avots.

Izpratne par darbības jomu ietver arī tādus jēdzienus kā globāls nosaukumvietas piesārņojums, kas var padarīt jūsu kodu vairāk pakļautu kļūdām.