⊗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हिन्दीMagyarIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Մենք օգտագործում ենք cookie-ներ կայքի աշխատանքի, վերլուծության և անհատականացման համար։ Տվյալների մշակումը կատարվում է համաձայն Գաղտնիության քաղաքականության։
ընդունել բոլորը կարգավորել մերժել