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 buclelorfor
șiwhile
. 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: