⊗jsPmClLEA 261 of 505 menu

Aplikácia lexikálneho prostredia funkcií v JavaScripte

Majme funkciu, ktorá ako svoj výsledok vracia inú funkciu:

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

Ak rodičovská funkcia má nejaké premenné, tieto premenné budú obsiahnuté v lexikálnom prostredí vrátenej funkcie:

function test() { let num = 1; // premenná rodičovskej funkcie return function() { // lexikálne prostredie = {num: 1} } }

Napíšme v kóde našej vrátenej funkcie console.log, ktorý vypíše hodnotu premennej num:

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

Poďme teraz zavolať rodičovskú funkciu test a výsledok jej práce zapíšme do premennej func:

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

Do premennej func sa zapíše vrátená funkcia. Poďme zavolať našu funkciu - ako svojím výsledkom vypíše obsah premennej num:

function test() { let num = 1; return function() { console.log(num); } } let func = test(); func(); // vypíše 1

Ak sa jednoducho pokúsime vypísať premennú num mimo funkcie - bude nedostupná:

function test() { let num = 1; return function() { console.log(num); } } console.log(num); // premenná num tu je nedostupná

Ako vidíte, lokálna premenná num sa naviazala na lexikálne prostredie našej funkcie a teraz, zavolaním na akomkoľvek mieste kódu túto funkciu, môžeme získať hodnotu premennej num, aj keby v mieste volania sama o sebe táto premenná bola nedostupná.

V skutočnosti podobný výsledok je možné dosiahnuť vytvorením premennej num globálnou:

function test() { return function() { console.log(num); } } let num = 1; // globálna premenná let func = test(); func(); // vypíše 1

Tu však bude podstatný rozdiel: v novom variante premennú num je možné meniť mimo funkcií (keďže je globálna), kdežto v starom - nie.

Určite, bez spustenia kódu, čo sa vypíše do konzoly:

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

Určite, bez spustenia kódu, čo sa vypíše do konzoly:

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

Určite, bez spustenia kódu, čo sa vypíše do konzoly:

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

Určite, bez spustenia kódu, čo sa vypíše do konzoly:

function test() { let num = 1; return function() { return num; } } let num = 2; let func = test(); console.log(func());
Slovenčina
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Používame cookies na fungovanie stránky, analýzu a personalizáciu. Spracúvanie údajov prebieha v súlade s Politikou ochrany osobných údajov.
prijať všetky nastaviť odmietnuť