Function Scope en Block Scope

Wanneer u een variabele binnen een functie declareert, is de variabele binnen de functie gebonden en kunt u er buiten de functie niet bij. var is het sleutelwoord om een variabele te definiëren voor functiebereik-toegankelijkheid.

Nu, zou je kunnen vragen, als het een fout geeft, zelfs als je let of const gebruikt, waarom is alleen var geassocieerd met functiebereik? let en const worden gebruikt om blokbereik te definiëren, en vóór ES6 had JavaScript geen blokbereik of let en const.

Een blokbereik is het gebied binnen if, switch voorwaarden of for en while lussen. Eenvoudig gezegd, wanneer u {krullende haakjes} ziet, is het een blok.

Laten we eens een voorbeeld bekijken:

Nu zou je verwachten dat geen van de log commando’s zou werken, maar zoals je kunt zien is dat niet het geval met var, variabelen gedefinieerd met var binnen if, switch condities of for en while loops kunnen globaal benaderd worden en maken deel uit van het globale bereik en daarom is het beter om let en const met hen te gebruiken.

Lexical Scope

Eindelijk hebben we het ware doel van deze post bereikt. Nou, ik had de lange discussie over scope kunnen overslaan, maar persoonlijk denk ik niet dat je lexical scope kunt begrijpen zonder de belangrijkste componenten te kennen die eromheen draaien.

Wederom een punt om te onthouden: Javascript heeft lexical scoping met functies scope.

In eenvoudige woorden, het betekent dat de kinderen scope toegang heeft tot de variabelen gedefinieerd in de ouder scope. Bijvoorbeeld, als ik een functie zou definiëren en een variabele daarin zou declareren en in dezelfde functie een andere functie zou definiëren, dan zou ik in staat moeten zijn om die variabele te gebruiken in de binnenste functie vanwege lexical scoping. Laten we een voorbeeld bekijken:

Uit het voorbeeld kunt u opmaken dat de variabelen die in outerFunction() worden gedeclareerd, toegankelijk zijn via innerfunction(), dit is lexical scoping.

De reikwijdte van variabelen wordt bepaald door hun positie in de code. Om variabelen op te lossen, begint JavaScript bij het binnenste bereik en zoekt naar buiten totdat het de variabele vindt waarnaar het op zoek was. In het bovenstaande voorbeeld zoekt Javascript eerst naar variabelen binnen innerFunction() en wanneer het die niet vindt, gaat het naar buiten, d.w.z. outerFunction()

Lexical scoping is beter omdat we gemakkelijk de waarde van een variabele kunnen achterhalen vanuit de code, terwijl in dynamic scoping de betekenis van een variabele kan veranderen tijdens runtime, wat het complex maakt om te begrijpen.

Dus, we hebben met succes begrepen wat lexical scoping is, laten we nu eens kijken naar closures waar lexical scoping daadwerkelijk wordt gebruikt.

Geef een antwoord

Het e-mailadres wordt niet gepubliceerd.