⊗jsPmClLEA 261 of 505 menu

Примјена лексичког окружења функција у JavaScript-у

Нека имамо функцију, која својим резултатом враћа другу функцију:

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

Ако родитељска функција има неке променљиве, онда ће те променљиве бити садржане у лексичком окружењу враћене функције:

function test() { let num = 1; // променљива родитељске функције return function() { // лексичко окружење = {num: 1} } }

Напишимо у коду наше враћене функције console.log, који исписује вредност променљиве num:

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

Хајде сада да позовемо родитељску функцију test и њен резултат упишемо у променљиву func:

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

У променљиву func уписаће се враћена функција. Хајде да позовемо нашу функцију - својим резултатом она ће исписати садржај променљиве num:

function test() { let num = 1; return function() { console.log(num); } } let func = test(); func(); // исписаће 1

Ако се пак једноставно покуша исписати променљива num ван функције - она неће бити доступна:

function test() { let num = 1; return function() { console.log(num); } } console.log(num); // променљива num овде није доступна

Као што видите, локална променљива num се везала за лексичко окружење наше функције и сада, позвавши на било ком мјесту у коду ту функцију, моћи ћемо да добијемо вредност променљиве num, чак и ако на мјесту позива сама по себи та променљива није доступна.

Заправо сличан резултат се може постићи, учинивши променљиву num глобалном:

function test() { return function() { console.log(num); } } let num = 1; // глобална променљива let func = test(); func(); // исписаће 1

Овде, међутим, биће значајна разлика: у новој варијанти променљиву num се може мијењати ван функција (јер је глобална), а у старој - не.

Одредите, без покретања кода, шта ће се исписати у конзолу:

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

Одредите, без покретања кода, шта ће се исписати у конзолу:

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

Одредите, без покретања кода, шта ће се исписати у конзолу:

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

Одредите, без покретања кода, шта ће се исписати у конзолу:

function test() { let num = 1; return function() { return num; } } let num = 2; let func = test(); console.log(func());
Српски
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Користимо колачиће за рад сајта, аналитику и персонализацију. Обрада података се врши у складу са Политиком приватности.
прихвати све подеси одбиј