⊗jsPmClLEA 261 of 505 menu

Anvendelse af funktioners leksikalske omgivelse i JavaScript

Lad os sige, at vi har en funktion, der returnerer en anden funktion som sit resultat:

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

Hvis den overordnede funktion har nogen variabler, vil disse variabler være indeholdt i den returnerede funktions leksikalske omgivelse:

function test() { let num = 1; // variabel i den overordnede funktion return function() { // leksikalsk omgivelse = {num: 1} } }

Lad os skrive console.log i koden af vores returnerede funktion, som udskriver værdien af variablen num:

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

Lad os nu kalde den overordnede funktion test og gemme resultatet af dens udførelse i variablen func:

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

Den returnerede funktion vil blive gemt i variablen func. Lad os kalde vores funktion - som sit resultat vil den udskrive indholdet af variablen num:

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

Hvis man derimod bare forsøger at udskrive variablen num uden for funktionen - vil den være utilgængelig:

function test() { let num = 1; return function() { console.log(num); } } console.log(num); // variablen num er ikke tilgængelig her

Som du kan se, blev den lokale variabel num bundet til vores funktions leksikalske omgivelse, og nu, ved at kalde denne funktion hvor som helst i koden, kan vi få værdien af variablen num, selvom variablen i sig selv ikke er tilgængelig på kaldstedet.

Faktisk kan man opnå et tilsvarende resultat ved at gøre variablen num global:

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

Her vil der dog være en væsentlig forskel: i den nye version kan variablen num ændres uden for funktioner (da den er global), men i den gamle - kan den ikke.

Bestem, uden at køre koden, hvad der vil blive udskrevet i konsollen:

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

Bestem, uden at køre koden, hvad der vil blive udskrevet i konsollen:

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

Bestem, uden at køre koden, hvad der vil blive udskrevet i konsollen:

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

Bestem, uden at køre koden, hvad der vil blive udskrevet i konsollen:

function test() { let num = 1; return function() { return num; } } let num = 2; let func = test(); console.log(func());
Dansk
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Vi bruger cookies til webstedets funktion, analyse og personalisering. Behandling af data foregår i henhold til Fortrolighedspolitikken.
accepter alle tilpas afvis