⊗jsPmClLEA 261 of 505 menu

JavaScript функцияларының лексикалық ортасын қолдану

Бізде нәтижесі ретінде басқа функцияны қайтаратын функция бар делік:

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

Егер аталық функцияның қандай да бір айнымалылары болса, онда бұл айнымалылар қайтарылатын функцияның лексикалық ортасында болады:

function test() { let num = 1; // аталық функцияның айнымалысы return function() { // лексикалық орта = {num: 1} } }

Қайтарылатын функциямыздың кодында num айнымалысының мәнін шығаратын console.log жазайық:

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
Біз сайттың жұмысы, аналитика және персонализация үшін cookie файлдарын қолданамыз. Деректерді өңдеу Құпиялылық саясаты бойынша жүреді.
барлығын қабылдау баптау қабылдамау