⊗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 файлдарын колдонобуз. Маалыматтарды иштетүү Маалыматты коргоо саясаты боюнча жүргүзүлөт.
баарын кабыл алуу ыңгайлаштыруу четке кагуу