Funktionsområde og blokområde
Når du erklærer en variabel inde i en funktion, er variablen bundet i funktionen, og du kan ikke få adgang til den uden for funktionen. var
er nøgleordet til at definere en variabel for adgang til funktionsomfanget.
Nu spørger du måske, hvis det giver en fejl, selv om du bruger let
eller const
, hvorfor er kun var
forbundet med funktionsomfang? Sagen er den, at let
og const
bruges til at definere blokområde, og før ES6 havde JavaScript ikke blokområde eller let
og const
.
Et blokområde er området inden for
if
,switch
betingelser ellerfor
ogwhile
sløjfer. Kort sagt , når du ser {krumme parenteser}, er det en blok.
Lad os se et eksempel:
Nu forventer du måske, at ingen af log-kommandoerne skulle virke, men som du kan se, er det ikke tilfældet med var, variabler defineret med var inde i if
, switch
betingelser eller for
og while
sløjfer kan tilgås globalt og er en del af det globale omfang, og derfor er det bedre praksis at bruge let
og const
med dem.
Lexical Scope
Endeligt er vi nået frem til det egentlige formål med dette indlæg. Godt nok kunne jeg have sprunget den lange diskussion om scope over, men personligt mener jeg ikke, at man kan forstå lexical scope uden at kende de vigtigste komponenter, der kredser om det.
Og igen, en pointe, man skal huske: Javascript har lexical scoping med funktioner scope.
Med enkle ord betyder det, at børns scope har adgang til de variabler, der er defineret i det overordnede scope. Hvis jeg f.eks. definerer en funktion og erklærer en variabel i den og inden for den samme funktion definerer en anden funktion, så burde jeg kunne bruge denne variabel inden for den indre funktion på grund af lexical scoping. Lad os se et eksempel: