⊗jsPmClLEA 261 of 505 menu

JavaScriptda funktsiyalarning leksik muhitidan foydalanish

Faraz qilaylik, bizda natija sifatida boshqa funktsiyani qaytaruvchi funktsiya bor:

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

Agar ona funktsiyaning qandaydir o'zgaruvchilari bo'lsa, bu o'zgaruvchilar qaytarilayotgan funktsiyaning leksik muhitida saqlanadi:

function test() { let num = 1; // ona funktsiyaning o'zgaruvchisi return function() { // leksik muhit = {num: 1} } }

Keling, bizning qaytarilayotgan funktsiya kodimizga console.log ni yozamiz, u num o'zgaruvchisining qiymatini chiqaradi:

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

Keling, endi test ona funktsiyasini chaqiramiz va uning ishlash natijasini func o'zgaruvchisiga yozamiz:

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

func o'zgaruvchisiga qaytarilgan funktsiya yoziladi. Keling, funktsiyamizni chaqiraylik - uning natijasi sifatida num o'zgaruvchisining tarkibi chiqariladi:

function test() { let num = 1; return function() { console.log(num); } } let func = test(); func(); // 1 ni chiqaradi

Agar num o'zgaruvchisini funktsiyadan tashqarida chiqarishga urinsak - u mavjud bo'lmaydi:

function test() { let num = 1; return function() { console.log(num); } } console.log(num); // num o'zgaruvchisi bu yerda mavjud emas

Ko'rib turganingizdek, num mahalliy o'zgaruvchisi bizning funktsiyamizning leksik muhitiga bog'landi va endi, ushbu funktsiyani kodning istalgan joyida chaqirganimizda, num o'zgaruvchisining qiymatini olishimiz mumkin, hatto chaqirish joyida o'zgaruvchining o'zi mavjud bo'lmasa ham.

Aslida, num o'zgaruvchisini global qilish orqali shunga o'xshash natijaga erishish mumkin:

function test() { return function() { console.log(num); } } let num = 1; // global o'zgaruvchi let func = test(); func(); // 1 ni chiqaradi

Biroq, bu erda sezilarli farq bo'ladi: yangi variantda num o'zgaruvchisini funktsiyalardan tashqarida o'zgartirish mumkin (chunki u global), ammo eskisida - mumkin emas.

Kodni ishga tushirmasdan, konsolda nima chiqishini aniqlang:

function test() { let num1 = 1; let num2 = 2; return function() { return num1 + num2; } } let func = test(); console.log(func());

Kodni ishga tushirmasdan, konsolda nima chiqishini aniqlang:

function test() { let num1 = 1; let num2 = 2; return function() { return num1 + num2; } } console.log(test()());

Kodni ishga tushirmasdan, konsolda nima chiqishini aniqlang:

function test() { let num1 = 1; return function() { return num1 + num2; } } let num2 = 2; let func = test(); console.log(func());

Kodni ishga tushirmasdan, konsolda nima chiqishini aniqlang:

function test() { let num = 1; return function() { return num; } } let num = 2; let func = test(); console.log(func());
Oʻzbek
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекTiếng Việt
Biz sayt ishlashi, tahlil qilish va shaxsiylashtirish uchun cookie-fayllardan foydalanamiz. Ma'lumotlarni qayta ishlash Maxfiylik siyosatiga muvofiq amalga oshiriladi.
hammasini qabul qilish sozlash rad etish