⊗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ščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
ვებსაიტის მუშაობის, ანალიტიკისა და პერსონალიზაციისთვის ვიყენებთ ქუქი-ფაილებს. მონაცემთა დამუშავება ხდება Კონფიდენციალურობის პოლიტიკის შესაბამისად.
ყველას მიღება პარამეტრები უარყოფა