Aș încerca să explic domeniul lexical în engleză simplă. Urează-mi noroc
în timp ce scriu un articol despre închideri și viață cu câteva zile în urmă. Încercam să explic domeniul lexical într-un mod scurt și simplu. Am observat că articolul devenea din ce în ce mai mare, așa că am decis să scriu separat despre domeniul lexical.
în acest articol, aș încerca să explic elementele de bază ale domeniului lexical, ce înseamnă și să dau exemple pentru a vă ajuta să înțelegeți cum funcționează în JavaScript. Fără cuvinte cheie…Promit.
În primul rând, să descompunem cuvântul „scop Lexical”.
domeniul de aplicare
vom vorbi mai întâi despre cel ușor: domeniul de aplicare.
în engleză simplă, domeniul de aplicare poate însemna:
- o limită
- o regiune
- un mediu
sau orice alt sinonim la care te-ai putea gândi.
vă amintiți că ați vizionat un tutorial în care instructorul vă spune că o anumită idee / subiect este dincolo de sfera videoclipului?
sau când o echipă dintr-un alt departament lucrează la un proiect și le spui să adauge o caracteristică pe care o consideri mișto și îți spun: „asta depășește sfera acestui proiect”.
Ei bine, cred că ai înțeles esența. Domeniul de aplicare este pur și simplu o regiune în care ceva este permis să funcționeze la o anumită perioadă de timp.
în informatică, aceasta ar putea însemna o regiune în care unele date există și pot fi accesate. Aceste date ar putea fi ceva de genul unei variabile.
într-o limbă ca JavaScript, am putea defini un domeniu de aplicare prin crearea unui bloc folosind acolade buclat: {...}
. Noi numim acest domeniu bloc. Aceasta înseamnă că variabilele declarate în interiorul acestui bloc pot fi accesate numai în această regiune. Această regiune acoperă tot ce este în interiorul ei, inclusiv alte blocuri copil/interior create în acea regiune.
cu alte cuvinte, această regiune estelocal
și variabilele sale nu pot fi accesate direct din lumea exterioară. Deci, acest lucru ar putea fi numit un domeniu local.
variabile declarate în interiorul funcții sunt în domeniul de aplicare locală a funcției.
function doSomething() { let name = "john"; console.log(name)}doSomething(); // Prints 'john'// would produce a Reference error// because name is local to doSomething() function's scopeconsole.log(name);
acum, este posibil să fi auzit de domeniul Global înainte. Ei bine, asta e un mediu care nu este închis într-un bloc. Fiecare cod din mediul dvs. Javascript are acces la acesta. Acesta este mediul JavaScript deschis. Deci, codul de mai jos ar trebui să funcționeze.
let name = "john"; // In the global scopefunction doSomething() { name = "James" console.log(name); // The function can access the global scope variable 'name'}doSomething(); // Prints "James"console.log(name); // Can access 'name' too
un lucru de reținut:
un domeniu are acces la domeniul său părinte, dar domeniul părinte nu are acces direct la variabilele declarate într-un domeniu interior.
funcția are acces laname
deoarece funcția este declarată în domeniul global șiname
există în domeniul global. Dacă numele a fost declarat în interiorul funcțieidoSomething()
, atunci codul din domeniul global nu poate modifica valoareaname
direct deoarecename
este locală funcției.
cred că aveți o bună înțelegere a ceea ce înseamnă domeniul de aplicare. Înseamnă pur și simplu o regiune sau un mediu în care există o variabilă și poate fi accesată sau modificată.
acum, să vorbim despre „Lexical”
Lexical
pentru a înțelege lexical, să ne uităm mai întâi la cuvântul din care este derivat din: Lexicon.
Lexicon a fost derivat din cuvântul latin: „lexis „care înseamnă”cuvânt”
în engleză simplă:
lexiconul înseamnă pur și simplu un dicționar. În ordine cuvinte, înseamnă un vocabular al limbii unei persoane. Este ca o carte în care sunt stocate semnificația/definiția cuvintelor.
ori de câte ori doriți să găsiți sensul unui cuvânt, mergeți la lexicon.
Nu te uiți la locul în care este folosit cuvântul și ghici ce înseamnă și conținutul sau valoarea acestuia. Întotdeauna mergeți la lexicon, unde scopul cuvântului este creat și clar definit.
acum cu această explicație:
Lexical înseamnă pur și simplu ceva legat de lexicon. Cu alte cuvinte, înseamnă ceva legat de cuvintele sau vocabularul limbii unei persoane. Ceva legat de crearea sau definirea cuvintelor.
Să vorbim despre sfera lexicală.
domeniul Lexical
am văzut semnificația celor două cuvinte în engleză simplă.
Cu aceste cunoștințe, să definim domeniul Lexical în limba engleză simplă:
domeniul Lexical înseamnă pur și simplu că regiunea în care există un cuvânt este determinată de locul în care a fost definit sau creat.
alte definiții ar fi:
domeniul Lexical înseamnă că semnificația/valoarea unui cuvânt poate fi determinată numai de regiunea / mediul în care a fost creat.
sfera lexicală înseamnă că nu externalizați direct sensul unui cuvânt către persoane dintr-o regiune exterioară care folosește cuvântul. Acest lucru se datorează faptului că lexicalul pune accentul pe originea locului în care a fost creat/definit.
bine, voi da un exemplu.
să folosim cuvântul: „dans”.
cuvântul „dans” a fost creat/definit în Marea Britanie. Poporul britanic îi cunoaște semnificația. Acest cuvânt există în domeniul în care a fost creat: „Marea Britanie”. Țara Galilor este în Marea Britanie, astfel încât țara Galilor are acces la acest cuvânt (amintiți-vă că am explicat deja de ce mai sus). Deci, poporul galez poate actualiza sensul acestui cuvânt pentru a se potrivi dialectului lor local. Acest lucru se datorează faptului că acestea se află în sfera de aplicare a Marii Britanii.
germanii nu pot veni direct și schimba sensul acestui cuvânt. Acest lucru se datorează faptului că cuvântul nu a fost creat în Germania. Deci, dacă germanii ar dori să folosească cuvântul englezesc: „dans” și acel cuvânt nu a fost încă creat de Marea Britanie, acel cuvânt nu ar fi disponibil oricât de mult ar încerca. Acest lucru nu ar face pe nimeni să cunoască sensul real al acestui cuvânt în Germania, deoarece cuvântul nu există în lexiconul Britanic. (Nu vă faceți griji dacă acest lucru pare păsărească, voi explica cu cod mai târziu)
Din moment ce suntem studenți de știință și nu lingviști, să înlocuiască „cuvânt” cu „variabilă”.
noua noastră definiție ar fi:
domeniul Lexical înseamnă pur și simplu că regiunea în care există o variabilă este determinată de locul în care a fost definită sau creată.
domeniul Lexical înseamnă că semnificația/valoarea unei variabile poate fi determinată numai de regiunea / mediul în care a fost creată.
domeniul Lexical înseamnă că nu externalizați direct semnificația unei variabile la cod dintr-o regiune exterioară(bloc) care utilizează variabila. Acest lucru se datorează faptului că lexicalul pune accentul pe originea în care a fost creată/definită variabila.
deci, ceea ce ne arată domeniul lexical este că o variabilă poate fi utilizată numai în domeniul în care a fost creată și nu unde a fost numită.
Să vedem cum funcționează acest lucru în cod:
function rideBritishBoat() { let boatName = "Queen's Dab"; // local variable return `Driving ${boatName}`}function rideGermanBoat() { const status = rideBritishBoat(); return status;}rideGermanBoat();
exemplul de mai sus simulează un scenariu în care germanii au cumpărat o barcă din Marea Britanie….(Ai putea schimba care vreodată țară vă want…no trebuie să lupte de ce nu am menționat o altă țară. Acestea sunt doar nume de țări și nu biblioteci JavaScript ).rideGermanBoat()
utilizeazărideBritishBoat()
.
deoarece JavaScript folosește domeniul lexical, atunci când execută rideBritishBoat()
funcția, merge acolo unde a fost creată și primește referința variabilei: boatName
. Deci, cu lexical scoping, ori de câte ori rideBritishBoat()
este executat, JavaScript intră în sfera funcției pentru a căuta variabilele utilizate în această funcție.
notă: domeniul de aplicare al funcțieirideBritishBoat()
este domeniul său de aplicare local și domeniul de aplicare global. rideGermanBoat()
nu se află în sfera lexicală a funcției rideBritishBoat()
deoarece rideBritishBoat()
nu a fost creat în interiorul acesteia.
acum, să schimbăm puțin exemplul:
function rideBritishBoat() { return `Driving ${boatName}`; // Reference Error: boatName not defined}function rideGermanBoat() { let boatName = "Merkel's Dab"; const status = rideBritishBoat(); return status;}rideGermanBoat();
codul de mai sus eșuează. FuncțiilerideBritishBoat()
nu sunt precise. Nu reușește atunci când încearcă să acceseze boatName
în declarația de returnare.
de ce?
Acest lucru se datorează faptului că JavaScript utilizează domeniul lexical.
Cum funcționează acest lucru este atunci când întâlnește boatName
variabilă în interiorul rideBritishBoat()
funcție, Se caută în cazul în care boatName
variabilă a fost creat în lanțul său domeniu de aplicare. Adică, tot domeniul de aplicare posibil al acestei funcții care este: domeniul de aplicare Local al funcției, apoi verifică domeniul de aplicare al acesteia, în acest caz, domeniul de aplicare Global.
deci, acesta este modul în care JavaScript verifică variabilele. Verifică mai întâi blocul local în care este utilizată variabila curentă pentru a ști dacă a fost declarată acolo. Dacă nu a fost, atunci merge până la domeniul de aplicare de închidere și continuă dacă nu găsește o declarație până când nu ajunge în partea de sus a lanțului, care este domeniul global
există un alt tip de Scoping numit „domeniu dinamic”.
codul anterior ar funcționa într-o limbă care acceptă domeniul dinamic(de exemplu, Lisp).
acest lucru se datorează faptului că într-un mediu dinamic scoped, variabila este verificată la run-time. Ceea ce înseamnă este că atunci când executați rideGermanBoat()
și execuția ajunge larideBritishBoat()
mediul de rulare verifică valoareaboatName
unde codul rulează în prezent. În acest caz, îl găsește, deci nici o problemă și Codul funcționează la așteptat și imprimă Driving Merkel's Dab
.
domeniul Lexical este, de asemenea, numit domeniu Static, deoarece domeniul său de aplicare este determinat în timpul compilării. Ceea ce înseamnă că mediul/domeniul de aplicare este fix și nu se poate schimba doar. Cu alte cuvinte, variabilele pot fi apelate numai din blocul de cod în care a fost declarat/creat.
domeniul dinamic se numește dinamic, deoarece mediul său (domeniul exterior) se poate schimba. Cu alte cuvinte, variabilele pot fi apelate din afara blocului în care sunt create.
deci, am putea avea o altă funcție care utilizează rideBritishBoat()
numitrideMauritianBoat()
:
function rideMauritianBoat() { let boatName = "Flying Dodo's Dab"; const status = rideBritishBoat(); return status;}rideMauritianBoat();
într-un limbaj dinamic scoped, puteți vedea valoareaboatName
variabilă în interiorulrideBritishBoat()
depinde de domeniul de aplicare în care este executat. După cum putem vedea că acest domeniu de aplicare se poate schimba, prin urmare, este dinamic.
deci, în interiorul rideBritishBoat()
, se numește boatName
variabila rideMauritianBoat()
care este în afara domeniului său de aplicare bloc.
acesta este domeniul dinamic și domeniul Lexical este opusul.
dar amintiți-vă, JavaScript nu este dinamic scoped. Acest lucru este doar pentru a vă arăta diferența.
deci lexical scoping verifică variabilele în timpul compilării (variabilele trebuie create și accesibile în domeniul / blocul utilizat) în timp ce dynamic scoping verifică variabilele în timpul rulării (variabilele ar putea să nu fie create în domeniul de aplicare la compilare, dar pot fi prezente atunci când funcția rulează).
Devs Senior fi ca: Tipule!! JavaScript nu este un limbaj compilat!!
te rog, hai să lăsăm discuția pentru altă zi. Încearcă să primești mesajul pe care-l transmit.
Bine, sunt suparat acum. Iată un exercițiu pentru tine.
exercițiu rapid
care ar fi rezultatul acestei funcții?
function rideBritishBoat() { let boatName = "Queen's Dab"; function rideWelshBoat() { boatName = "Welsh Royal Boat"; console.log(boatName) } rideWelshBoat();}rideBritishBoat()
rezumat
scopul acestui articol a fost de a explica domeniul lexical într-un mod simplu folosind gramatica de bază și exemple scurte. Dacă ați observat unele cuvinte sunt cu caractere aldine. Acestea sunt cuvintele cheie pentru a înțelege acest concept. În plus, am o mulțime de definiții alternative ale acelorași concepte. Acest lucru a fost făcut pentru tine pentru a selecta care se scufundă în ușor pentru tine. Accidente vasculare cerebrale diferite pentru diferite persoane
Din ceea ce am învățat mai sus putem spune că:
- un domeniu este un mediu/regiune în care există ceva (o variabilă)
- un domeniu poate accesa părinții săi.
- un domeniu părinte nu are acces direct la variabilele declarate într-un domeniu interior.
- Lexical are de-a face cu locul în care a fost declarată/creată o variabilă.
- domeniul Lexical impune găsirea variabilelor din domeniul/blocul în care au fost create / declarate și nu din mediul în care rulează.
- domeniul dinamic este opusul domeniului Lexical.
- dynamic scoping verifică variabilele de unde rulează.
Vă mulțumim pentru lectură.
ne vedem in urmatoarea postare.