"Opseg" se odnosi na trenutni kontekst izvođenja u kojem vaš kod može referencirati ili "vidjeti" vrijednosti i izraze. Varijablama, objektima i funkcijama iz raznih dijelova koda dostupno je na temelju njihovih opsega.

U JavaScriptu varijable, objekti i funkcije mogu imati globalni opseg, opseg modula, opseg bloka ili opseg funkcije.

Globalni opseg u JavaScriptu

Svaka vrijednost deklarirana izvan funkcije ili bloka u skripti ima globalni opseg i svaka druga datoteka skripte u vašem programu može joj pristupiti.

Na primjer, deklariranje globalne varijable u jednoj datoteci:

// index.js
neka globalVariable = "neku vrijednost"

Znači da mu bilo koja druga skripta u vašem programu može pristupiti:

// otherScript.js
konzola.log (globalna varijabla) // neka vrijednost

Deklariranje JavaScript varijabli u globalnom opsegu je loša praksa jer može dovesti do zagađenja imenskog prostora. Globalni imenski prostor je gornji prostor Javascripta koji sadrži varijable, objekte i funkcije. U pregledniku se povezuje s Prozor objekt, dok NodeJS koristi objekt pod nazivom globalno.

instagram viewer

Onečišćenje globalnog imenskog prostora može dovesti do kolizije imena. Ovo je situacija u kojoj vaš kôd pokušava koristiti isti naziv varijable za različite stvari u istom prostoru imena. Često se susreću sukobi imena u velikim projektima koji koriste nekoliko biblioteka trećih strana.

Opseg modula

Modul je samostalna datoteka koja enkapsulira i izvozi dijelove koda za korištenje drugih modula u projektu. Omogućuje vam da učinkovitije organizirate i održavate svoju bazu kodova.

Formalizirani ES moduli obrazac JavaScript modula u JavaScriptu 2015.

Varijable koje deklarirate u modulu obuhvaćene su tim modulom, što znači da im nijedan drugi dio programa ne može pristupiti.

Varijablu deklariranu u modulu možete koristiti samo izvan njega ako modul eksportira tu varijablu koristeći izvoz ključna riječ. Tada možete uvesti to ime u drugi modul pomoću uvoz ključna riječ.

Evo primjera koji pokazuje izvoz klase:

// index.js
izvozrazredafuj{
konstruktor(svojstvo_1, svojstvo_2) {
ovaj.svojstvo_1 = svojstvo_1
ovaj.svojstvo_2 = svojstvo_2
}
}

A evo kako možete uvesti taj modul i koristiti svojstvo koje izvozi:

// someModule.js
uvoz {fu} iz './index.js'

const bar = new Foo('fuj', 'bar')

konzola.log (bar.property_1) // fuj

Datoteke se prema zadanim postavkama u JavaScriptu ne deklariraju kao moduli.

U JavaScriptu na strani klijenta, možete deklarirati skriptu kao modul postavljanjem tip pripisati modul na skripta označiti:

<vrsta skripte="modul" src="index.js"></script>

U NodeJS-u možete deklarirati skriptu kao modul postavljanjem tip vlasništvo na modul u vašem paket.json datoteka:

{
"tip": "modul"
}

Opseg bloka

Blok u JavaScriptu je mjesto gdje par vitičastih zagrada počinje i završava.

Varijable deklarirane unutar bloka s neka, i konst ključne riječi su obuhvaćene tim blokom, što znači da im ne možete pristupiti izvan njega. Ovaj opseg se ne odnosi na varijable deklarirane pomoću var ključna riječ:

{ // Početak bloka
konst jedan = '1'
neka dva = '2'
var tri = '3'
} // Kraj bloka

konzola.log (jedan) // izbacuje pogrešku

konzola.log (tri) // "3"

Varijable zatvorene u gornjem bloku i deklarirane kao const ili let dostupne su samo unutar bloka. Međutim, možete pristupiti varijabli deklariranoj pomoću var ključna riječ izvan bloka.

Opseg funkcije

Varijable deklarirane unutar funkcije obično se nazivaju lokalnim varijablama i ograničene su na funkciju. Ne možete im pristupiti izvan funkcije. Ovaj opseg se odnosi na varijable deklarirane s var, neka, i konst ključne riječi.

Budući da su varijable deklarirane u funkciji lokalne za funkciju, nazivi varijabli mogu se ponovno koristiti. Ponovno korištenje naziva varijabli s opsegom funkcija poznato je kao sjenčanje varijable, a za vanjsku varijablu se kaže da je "sjenčana".

Na primjer:

funkcijapomnožiti() {
neka jedan = 1
var dva = 2
konst tri = 3

povratak jedan dva tri
}

// Varijabilno sjenčanje
konst tri = 'tri' // Ne javlja pogrešku

Razumijevanje pravila opsega je od ključne važnosti

Poznavanje dostupnih opsega u JavaScriptu olakšava izbjegavanje pogrešaka. Pokušaj pristupa varijabli koja je nedostupna u određenom opsegu zreo je izvor grešaka.

Razumijevanje opsega također uključuje koncepte kao što je globalno zagađenje imenskog prostora, što može učiniti vaš kod sklonijim greškama.