A „hatókör” a végrehajtás aktuális kontextusára utal, amelyben a kód hivatkozhat vagy „láthat” értékeket és kifejezéseket. A kód különböző részeiből származó változók, objektumok és függvények hatókörük alapján érhetők el.

A JavaScriptben a változóknak, objektumoknak és függvényeknek lehet globális hatóköre, modulhatóköre, blokkhatóköre vagy függvényhatóköre.

Globális hatókör a JavaScriptben

A szkriptben egy függvényen vagy blokkon kívül deklarált érték globális hatókörrel rendelkezik, és a programban található bármely más parancsfájl hozzáférhet hozzá.

Például egy globális változó deklarálása egy fájlban:

// index.js
legyen globalVariable = "valami értéket"

Azt jelenti, hogy a program bármely más szkriptje hozzáférhet hozzá:

// otherScript.js
konzol.log (globális változó) // valamilyen érték

JavaScript-változók deklarálása globális értelemben rossz gyakorlat, mert névtérszennyezéshez vezethet. A globális névtér a Javascript legfelső tere, amely a változókat, objektumokat és függvényeket tartalmazza. Böngészőben a Ablak objektum, míg a NodeJS egy nevű objektumot használ globális.

instagram viewer

A globális névtér szennyezése névütközéshez vezethet. Ez egy olyan helyzet, amelyben a kód ugyanazt a változónevet próbálja használni különböző dolgokhoz ugyanabban a névtérben. Névütközések gyakran előfordulnak olyan nagy projektekben, amelyek több harmadik féltől származó könyvtárat használnak.

Modul hatóköre

A modul egy önálló fájl, amely beágyazza és exportálja a kódrészleteket a projekt más moduljai számára. Lehetővé teszi a kódbázis hatékonyabb rendszerezését és karbantartását.

Az ES modulok formalizáltak a JavaScript modul mintája JavaScriptben 2015-ben.

A modulban deklarált változók az adott modulra vonatkoznak, ami azt jelenti, hogy a program egyetlen más része sem érheti el őket.

Csak akkor használhat egy azon kívüli modulban deklarált változót, ha a modul a változót a következővel exportálja export kulcsszó. Ezt a nevet ezután egy másik modulba importálhatja a import kulcsszó.

Íme egy példa, amely egy osztály exportálását mutatja be:

// index.js
exportosztályFoo{
konstruktőr(tulajdon_1, tulajdonság_2) {
ez.property_1 = property_1
ez.property_2 = property_2
}
}

És a következőképpen importálhatja a modult, és használhatja az exportált tulajdonságot:

// someModule.js
import { Foo } tól től "./index.js"

const bar = new Foo('foo', 'rúd')

konzol.log (bar.property_1) // foo

A fájlok alapértelmezés szerint nincsenek modulként deklarálva a JavaScriptben.

Az ügyféloldali JavaScriptben a parancsfájlt modulként deklarálhatja a típus tulajdonít neki modult a forgatókönyv címke:

<script type="modult" src="index.js"></script>

A NodeJS-ben a parancsfájlt modulként deklarálhatja a típus tulajdonát modult a tiédben package.json fájl:

{
"típus": "modult"
}

Blokk hatóköre

A JavaScript blokkja az a hely, ahol egy göndör kapcsos zárójelpár kezdődik és végződik.

A blokkon belül deklarált változók a hagyja, és const a kulcsszavak erre a blokkra vonatkoznak, ami azt jelenti, hogy azon kívül nem érheti el őket. Ez a hatókör nem vonatkozik a változókkal deklarált változókra var kulcsszó:

{ // Blokk eleje
const one = '1'
legyen kettő = '2'
var három = '3'
} // Blokk vége

konzol.log (egy) // hibát dob

konzol.log (három) // "3"

A fenti blokkba zárt és const vagy let néven deklarált változók csak a blokkon belül érhetők el. A deklarált változót azonban elérheti a var kulcsszó a blokkon kívül.

Funkció hatóköre

A függvényen belül deklarált változókat általában helyi változóknak nevezik, és a függvényre vonatkoznak. A funkción kívül nem érheti el őket. Ez a hatókör a következővel deklarált változókra vonatkozik var, hagyja, és const kulcsszavakat.

Mivel a függvényben deklarált változók lokálisak a függvényben, a változók nevei újra felhasználhatók. A függvény-hatókörű változónevek újrafelhasználását változó árnyékolásnak nevezik, a külső változóról pedig azt mondják, hogy „árnyékolt”.

Például:

funkciószaporodnak() {
hagyja egy = 1
var kettő = 2
const három = 3

Visszatérés egy kettő három
}

// Változó árnyékolás
const három = 'három' // Nem dob hibát

A hatóköri szabályok megértése létfontosságú

A JavaScriptben elérhető hatókörök ismerete megkönnyíti a hibák elkerülését. Ha megpróbálunk hozzáférni egy olyan változóhoz, amely egy adott hatókörben nem érhető el, a hibák érett forrása.

A hatókör megértése olyan fogalmakat is magában foglal, mint például a globális névtérszennyezés, ami a kódot hajlamosabbá teheti a hibákra.