⊗jsPmClLEA 261 of 505 menu

Primena leksičkog okruženja funkcija u JavaScript-u

Neka imamo funkciju koja svog rezultatom vraća drugu funkciju:

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

Ako roditeljska funkcija ima bilo kakve promenljive, onda će te promenljive biti sadržane u leksičkom okruženju vraćene funkcije:

function test() { let num = 1; // promenljiva roditeljske funkcije return function() { // leksičko okruženje = {num: 1} } }

Napišimo u kodu naše vraćene funkcije console.log koji ispisuje vrednost promenljive num:

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

Hajde sada da pozovemo roditeljsku funkciju test i njen rezultat zabeležimo u promenljivu func:

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

U promenljivu func zabeležiće se vraćena funkcija. Hajde da pozovemo našu funkciju - svojim rezultatom ona će ispisati sadržaj promenljive num:

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

Ako se jednostavno pokuša ispisati promenljiva num van funkcije - ona neće biti dostupna:

function test() { let num = 1; return function() { console.log(num); } } console.log(num); // promenljiva num ovde nije dostupna

Kao što vidite, lokalna promenljiva num vezala se za leksičko okruženje naše funkcije i sada, pozivajući na bilo kom mestu koda ovu funkciju, možemo dobiti vrednost promenljive num, čak i ako na mestu poziva sama po sebi ova promenljiva i nije dostupna.

Zapravo, sličnog rezultata može se dostići ako se promenljiva num učini globalnom:

function test() { return function() { console.log(num); } } let num = 1; // globalna promenljiva let func = test(); func(); // ispisaće 1

Međutim, ovde će postojati suštinska razlika: u novoj varijanti promenljivu num možemo menjati van funkcija (pošto je globalna), a u staroj - ne možemo.

Odredite, bez pokretanja koda, šta će se ispisati u konzoli:

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

Odredite, bez pokretanja koda, šta će se ispisati u konzoli:

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

Odredite, bez pokretanja koda, šta će se ispisati u konzoli:

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

Odredite, bez pokretanja koda, šta će se ispisati u konzoli:

function test() { let num = 1; return function() { return num; } } let num = 2; let func = test(); console.log(func());
Srpski
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Koristimo kolačiće za rad sajta, analitiku i personalizaciju. Obrada podataka se vrši u skladu sa Politikom privatnosti.
prihvati sve podesi odbij