⊗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 ўзгарувчиси бизнинг функциямизнинг лексик муҳитига богланди ва энди, бу функцияни коднинг istalgan joyida чақирсак, biz 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ščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeOʻzbekTiếng Việt
Биз веб-сайт ишлаши, таҳлил қилиш ва персоналлаштириш учун кукидан фойдаланамиз. Маълумотларни қайта ишлаш Махфийлик сиёсатига мувофиқ амалга оширилади.
ҳаммасини қабул қилиш мослаштириш рад этиш