⊗jsPmClLEA 261 of 505 menu

Toepassing van lexicale omgeving van functies in JavaScript

Stel we hebben een functie die als resultaat een andere functie teruggeeft:

function test() { return function() { } }

Als de bovenliggende functie variabelen heeft, dan zullen deze variabelen bevat zijn in de lexicale omgeving van de teruggegeven functie:

function test() { let num = 1; // variabele van de bovenliggende functie return function() { // lexicale omgeving = {num: 1} } }

Laten we in de code van onze teruggegeven functie console.log schrijven, die de waarde van variabele num uitvoert:

function test() { let num = 1; return function() { console.log(num); } }

Laten we nu de bovenliggende functie test aanroepen en het resultaat ervan opslaan in variabele func:

function test() { let num = 1; return function() { console.log(num); } } let func = test();

In variabele func wordt de teruggegeven functie opgeslagen. Laten we onze functie aanroepen - als resultaat zal het de inhoud van variabele num uitvoeren:

function test() { let num = 1; return function() { console.log(num); } } let func = test(); func(); // geeft 1 weer

Als je simpelweg probeert de variabele num buiten de functie uit te voeren - zal deze niet beschikbaar zijn:

function test() { let num = 1; return function() { console.log(num); } } console.log(num); // variabele num is hier niet beschikbaar

Zoals je ziet, is de lokale variabele num verbonden met de lexicale omgeving van onze functie en nu, door deze functie waar dan ook in de code aan te roepen, kunnen we de waarde van variabele num verkrijgen, zelfs als op de aanroeplocatie deze variabele op zich niet beschikbaar is.

Eigenlijk kan een vergelijkbaar resultaat bereikt worden door variabele num globaal te maken:

function test() { return function() { console.log(num); } } let num = 1; // globale variabele let func = test(); func(); // geeft 1 weer

Hier zal echter een essentieel verschil zijn: in de nieuwe variant kan variabele num aangepast worden buiten de functies (omdat deze globaal is), terwijl dat in de oude - niet kan.

Bepaal, zonder de code uit te voeren, wat in de console wordt weergegeven:

function test() { let num1 = 1; let num2 = 2; return function() { return num1 + num2; } } let func = test(); console.log(func());

Bepaal, zonder de code uit te voeren, wat in de console wordt weergegeven:

function test() { let num1 = 1; let num2 = 2; return function() { return num1 + num2; } } console.log(test()());

Bepaal, zonder de code uit te voeren, wat in de console wordt weergegeven:

function test() { let num1 = 1; return function() { return num1 + num2; } } let num2 = 2; let func = test(); console.log(func());

Bepaal, zonder de code uit te voeren, wat in de console wordt weergegeven:

function test() { let num = 1; return function() { return num; } } let num = 2; let func = test(); console.log(func());
Nederlands
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Wij gebruiken cookies voor de werking van de site, analyse en personalisatie. De verwerking van gegevens gebeurt volgens het Privacybeleid.
alles accepteren aanpassen weigeren