Function Scope și Block Scope

Când declarați o variabilă în interiorul unei funcții, variabila este legată în cadrul funcției și nu o puteți accesa în afara acesteia. var este cuvântul cheie pentru a defini o variabilă pentru accesibilitatea în domeniul de cuprindere a funcției.

Acum, ați putea întreba, dacă dă o eroare chiar dacă folosiți let sau const, de ce este asociat doar var cu domeniul de cuprindere a funcției? Chestia este că let și const sunt folosite pentru a defini domeniul de cuprindere a blocurilor, iar înainte de ES6, JavaScript nu avea domeniul de cuprindere a blocurilor sau let și const.

Un domeniu de cuprindere a blocurilor este zona din interiorul condițiilor if, switch sau a buclelor for și while. Pur și simplu , ori de câte ori vedeți {între paranteze curbe}, este un bloc.

Să vedem un exemplu:

Acum v-ați putea aștepta ca niciuna dintre comenzile de jurnal să nu funcționeze, dar, după cum puteți vedea, nu este cazul cu var, variabilele definite cu var în interiorul condițiilor if, switch sau în buclele for și while pot fi accesate la nivel global și fac parte din domeniul global și, prin urmare, este o practică mai bună să folosiți let și const cu ele.

Lexical Scope

În cele din urmă, am ajuns la adevăratul scop al acestui post. Ei bine, aș fi putut sări peste lunga discuție despre domeniul de aplicare, dar, personal, nu cred că puteți înțelege domeniul de aplicare lexical fără a cunoaște componentele cheie care gravitează în jurul acestuia.

Din nou, un punct de reținut: Javascript are o sferă lexicală cu sfera funcțiilor.

În cuvinte simple, înseamnă că sfera copiilor are acces la variabilele definite în sfera părinților. De exemplu, dacă aș defini o funcție și aș declara o variabilă în interiorul ei și, în interiorul aceleiași funcții, aș defini o altă funcție, atunci ar trebui să pot folosi acea variabilă în interiorul funcției interioare datorită lexical scoping. Să vedem un exemplu:

Se poate observa din exemplu că variabilele declarate în outerFunction() sunt accesate prin innerfunction(), acesta este lexical scoping.

Scopul variabilelor este definit de poziția lor în cod. Pentru a rezolva variabilele, JavaScript începe de la domeniul de cuprindere cel mai interior și caută spre exterior până când găsește variabila pe care o căuta. În exemplul de mai sus, Javascript caută mai întâi variabilele din interiorul innerFunction() și, când nu le găsește, le caută în exterior, adică outerFunction()

Scopingul logic este mai bun deoarece ne putem da seama cu ușurință de valoarea unei variabile din cod, în timp ce în cazul scopingului dinamic, semnificația unei variabile se poate schimba în timpul execuției, ceea ce îl face complex de înțeles.

Acum am reușit să înțelegem ce este lexical scoping, acum să ne uităm la închideri unde lexical scoping-ul este folosit efectiv.

.

Lasă un răspuns

Adresa ta de email nu va fi publicată.