⊗jsPmClCNG 265 of 505 menu

JavaScriptдаги глобал ўзгарувчи саноги

num ўзгарувчисини функциалардан ташқарига чиқарамиз, шундай қилиб уни глобал қиламиз:

let num = 1; // глобал ўзгарувчи function test() { return function() { console.log(num); num++; }; }

Бунда ҳолда барча қайтарилган функциалар шу глобал ўзгарувчини ўзгартиради ва саноглар энді бир-бирига боғлиқ ишлайди:

let num = 1; function test() { return function() { console.log(num); num++; }; } let func1 = test(); // биринчи саноги func1(); // 1 ни чиқаради func1(); // 2 ни чиқаради let func2 = test(); // иккинчи саноги func2(); // 3 ни чиқаради func2(); // 4 ни чиқаради

Нима учун бизнинг олдинги кодимиз боғлиқ бўлмаган саноглар яратаётган эди? Ушбу кодни эслатаман:

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

Гал шундаки, num ўзгарувчиси test функциасининг ичидаги локал ўзгарувчидир. Шу сабабли ҳар бир test чақириғи ўзининг локал ўзгарувчисини яратади.

Шу сабабли қайтарилган функциалар test функциасининг ҳар бирига ўз локал ўзгарувчисига мурожаат қилади. Ана шундай қилиб ишнинг боғлиқ бўлмаслигига эришилади.

Агар num ни глобал ўзгарувчи қилиб қўйсак - бу ҳам йопиш бўлади. Фақатгина қайтарилган функциаларнинг лексик муҳитлари бир хил num ўзгарувчисига мурожаат қилади - ушбу ўзгарувчи билан бўлган ҳар қандай ўзгартиришлар барча функциаларда кўринади.

Кодни ишлатмасдан, консольга нима чиқишини аниқланг:

let counter = 0; function test() { return function() { console.log(counter); counter++; }; } let func = test; let func1 = func(); let func2 = func(); func1(); func2(); func1(); func2();

Кодни ишлатмасдан, консольга нима чиқишини аниқланг:

function test() { let counter = 0; return function() { return function() { console.log(counter); counter++; }; }; } let func = test()(); let func1 = func; let func2 = func; func1(); func2(); func1(); func2();

Кодни ишлатмасдан, консольга нима чиқишини аниқланг:

function test() { let counter = 0; return function() { return function() { console.log(counter); counter++; }; }; } let func = test(); let func1 = func(); let func2 = func(); func1(); func2(); func1(); func2();
Ўзбек
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
Биз веб-сайт ишлаши, таҳлил қилиш ва персоналлаштириш учун кукидан фойдаланамиз. Маълумотларни қайта ишлаш Махфийлик сиёсатига мувофиқ амалга оширилади.
ҳаммасини қабул қилиш мослаштириш рад этиш