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 eller for og while 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:

Det kan ses af eksemplet, at der er adgang til de variabler, der er deklareret i outerFunction(), via innerfunction(), dette er lexical scoping.

Variablernes omfang er defineret af deres position i koden. For at opløse variabler starter JavaScript ved det inderste scope og søger udad, indtil det finder den variabel, som det søgte. I ovenstående eksempel søger Javascript først efter variabler inden for innerFunction(), og når det ikke finder den, går det udenfor, dvs. outerFunction()

Lexical scoping er bedre, fordi vi nemt kan finde ud af værdien af en variabel ud fra koden, hvorimod i dynamic scoping kan betydningen af en variabel ændre sig på køretid, hvilket gør det kompliceret at forstå.

Så har vi med succes forstået, hvad lexical scoping er, lad os nu se på closures, hvor lexical scoping faktisk bruges.

Skriv et svar

Din e-mailadresse vil ikke blive publiceret.