⊗jsPmClLEA 261 of 505 menu

Uporaba leksikalnega okolja funkcij v JavaScriptu

Recimo, da imamo funkcijo, ki vrne drugo funkcijo:

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

Če ima nadrejena funkcija kakršne koli spremenljivke, bodo te spremenljivke vsebovane v leksikalnem okolju vrnjene funkcije:

function test() { let num = 1; // spremenljivka nadrejene funkcije return function() { // leksikalno okolje = {num: 1} } }

V kodo naše vrnjene funkcije napišimo console.log, ki izpiše vrednost spremenljivke num:

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

Pokličimo zdaj nadrejeno funkcijo test in njen rezultat zapišimo v spremenljivko func:

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

V spremenljivko func se bo zapisala vrnjena funkcija. Pokličimo našo funkcijo - z rezultatom bo izpisala vsebino spremenljivke num:

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

Če pa preprosto poskušamo izpisati spremenljivko num zunaj funkcije - ta ne bo dostopna:

function test() { let num = 1; return function() { console.log(num); } } console.log(num); // spremenljivka num tukaj ni dostopna

Kot vidite, se je lokalna spremenljivka num povezala z leksikalnim okoljem naše funkcije in zdaj, če kličemo to funkcijo kjer koli v kodi, lahko dobimo vrednost spremenljivke num, tudi če na mestu klica sama po sebi ta spremenljivka ni dostopna.

Pravzaprav je mogoče doseči podoben rezultat, če naredimo spremenljivko num globalno:

function test() { return function() { console.log(num); } } let num = 1; // globalna spremenljivka let func = test(); func(); // izpiše 1

Tukaj pa bo bistvena razlika: v novi različici lahko spremenljivko num spreminjamo zunaj funkcij (ker je globalna), v stari pa - ne.

Določite, ne da bi zagnali kodo, kaj se bo izpisalo v konzolo:

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

Določite, ne da bi zagnali kodo, kaj se bo izpisalo v konzolo:

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

Določite, ne da bi zagnali kodo, kaj se bo izpisalo v konzolo:

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

Določite, ne da bi zagnali kodo, kaj se bo izpisalo v konzolo:

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
Za delovanje spletnega mesta, analitiko in personalizacijo uporabljamo piškotke. Obdelava podatkov poteka v skladu s Politiko zasebnosti.
sprejmi vse nastavi zavrni