IlmHamroh
JavaScript Full-stack/8-qism. JavaScript asoslari40/61-dars14 daqiqa
Mundarija (29)

JavaScript return: funksiyadan qiymat qaytarish va erta qaytish

Qisqacha: return funksiya natijasini chaqirilgan joyga qaytarib beradi: return a + b;. Qaytgan qiymatni o'zgaruvchiga saqlash yoki boshqa hisobda ishlatish mumkin. return funksiyani shu zahoti to'xtatadi. return bo'lmasa, funksiya undefined qaytaradi.

Bu darsda

  • return bilan funksiyadan natija qaytara olasiz.
  • return va console.log farqini aniq tushuntira olasiz.
  • return funksiyani to'xtatishini va undan keyingi kod ishlamasligini bilasiz.
  • Erta qaytish (early return) bilan ichma-ich iflarni tekis kodga aylantira olasiz.
  • returndan keyingi yangi qator tuzog'ini taniysiz.

Oldin bilishingiz kerak: Parametrlar, argumentlar va default qiymatlar, if / else, undefined va null, break va continue.

1. Nega bu kerak?

O'tgan darsda funksiyaga ma'lumot berishni o'rgandik. Lekin bizning funksiyalar natijani faqat konsolga chiqarardi. Bu natijani keyin ishlatmoqchi bo'lsak-chi? Masalan, taksi narxidan chegirmani ayirmoqchimiz:

js
function taksiNarxi(km, tarif) {
  console.log(km * tarif);
}

const narx = taksiNarxi(5, 2000);
console.log(`Chegirma bilan: ${narx - 1000}`);

Konsolda:

text
10000
Chegirma bilan: NaN

Funksiya 10000 ni konsolga chiqardi. Lekin narx o'zgaruvchisiga hech narsa tushmadi — u undefined bo'lib qoldi. undefined - 1000 esa NaN.

Choyxonada tasavvur qiling. Oshpaz oshxonadan "Choy tayyor!" deb qichqirdi — bu console.log. Siz eshitdingiz, lekin choy stolingizga kelmadi. Ichib bo'lmaydi. Bizga choyni qo'limizga beradigan ofitsiant kerak. Funksiyada bu ishni return bajaradi.

2. return — natijani qaytarish

2.1 Birinchi misol

js
function taksiNarxi(km, tarif) {
  return km * tarif;
}

const narx = taksiNarxi(5, 2000);
console.log(narx); // 10000
console.log(`Chegirma bilan: ${narx - 1000}`); // Chegirma bilan: 9000

Endi funksiya konsolga hech narsa chiqarmaydi. U natijani qaytaradi, chiqarish esa chaqirgan kodning ishi.

return — funksiyadan natijani tashqariga beradigan kalit so'z. Undan keyin yozilgan ifoda hisoblanadi va shu qiymat chaqiruv o'rniga "qo'yiladi". Bu qiymat qaytish qiymati (return value) deyiladi.

Qadamma-qadam nima bo'ladi:

  1. taksiNarxi(5, 2000) chaqiriladi: km = 5, tarif = 2000.
  2. Funksiya ichida return km * tarif — ya'ni return 10000.
  3. Chaqiruv o'rniga 10000 qo'yiladi: const narx = 10000;.

2.2 Qaytgan qiymat — oddiy qiymat

Funksiya chaqiruvi qaytgan qiymatga "aylanadi". Shuning uchun uni oddiy son yoki satr turgan har qanday joyda ishlatish mumkin:

js
function kvadrat(son) {
  return son * son;
}

console.log(kvadrat(4)); // 16
console.log(kvadrat(3) + kvadrat(4)); // 25
console.log(`5 ning kvadrati: ${kvadrat(5)}`); // 5 ning kvadrati: 25
console.log(kvadrat(kvadrat(2))); // 16

Oxirgi qatorga e'tibor bering: kvadrat(kvadrat(2)). JavaScript ichkaridan tashqariga qarab ishlaydi. Avval kvadrat(2) — natija 4. Keyin kvadrat(4) — natija 16.

2.3 Funksiyalarni ulash

return tufayli funksiyalarni Lego bo'laklaridek ulash mumkin. Har biri bitta ishni qiladi, natijasini keyingisiga beradi:

js
function summaHisobla(narx, soni) {
  return narx * soni;
}

function qqsQosh(summa) {
  return summa + (summa * 12) / 100;
}

const jami = qqsQosh(summaHisobla(35000, 2));
console.log(jami); // 78400

2 ta osh — 70 000 so'm. Ustiga 12% QQS (qo'shilgan qiymat solig'i) — 78 400 so'm. console.log bilan ishlaydigan funksiyalarni bunday ulab bo'lmasdi.

Tekshirib ko'ring: function ikkilantir(x) { return x * 2; } bo'lsa, ikkilantir(ikkilantir(3)) + 1 nimaga teng?

Javob

13. Avval ichkaridagi ikkilantir(3) — 6. Keyin ikkilantir(6) — 12. Oxirida 12 + 1 = 13.

2.4 Istalgan turdagi qiymat

Funksiya son, satr, mantiqiy qiymat — istalgan turni qaytara oladi:

js
function salomMatni(ism) {
  return `Salom, ${ism}!`;
}

function kattami(yosh) {
  return yosh >= 18;
}

const matn = salomMatni("Jasur");
console.log(matn.toUpperCase()); // SALOM, JASUR!
console.log(kattami(20)); // true
console.log(kattami(15)); // false

matn ga qarang. salomMatni qaytargan narsa — oddiy satr. Shuning uchun unga satr metodlarini, masalan .toUpperCase() ni bemalol qo'llash mumkin.

kattami funksiyasiga qarang. yosh >= 18 o'zi true yoki false beradigan ifoda. Shuning uchun uni to'g'ridan-to'g'ri qaytarsa bo'ladi. Boshlovchilar ko'pincha shunday uzun yozadi:

js
// ❌ keraksiz uzun
if (yosh >= 18) {
  return true;
} else {
  return false;
}

// ✅ xuddi shu natija
return yosh >= 18;

Maslahat: true/false qaytaradigan funksiyaga savol shaklida nom bering: kattami, raqamBormi, boshmi. Inglizcha kodda bu isAdult, hasDigit kabi yoziladi.

3. return va console.log farqi

Bu ikkisini chalkashtirish — boshlovchilarning eng ko'p uchraydigan muammosi. Boshida bir xil tuyulishi tabiiy: ikkalasida ham "natija ko'rinadi". Lekin ular butunlay boshqa ish qiladi.

console.log return
Kimga Odamga (dasturchiga) ko'rsatadi Kodga (chaqirgan joyga) beradi
Natijani keyin ishlatish Mumkin emas Mumkin
Funksiyani to'xtatadimi Yo'q Ha
Nechta bajariladi Xohlagancha Faqat bittasi

Yaxshi amaliyot: hisoblaydigan funksiya natijani qaytarsin. Konsolga chiqarishni esa chaqirgan kod o'zi hal qilsin:

js
function chegirma(narx, foiz) {
  return (narx * foiz) / 100;
}

const summa = 80000;
console.log(`Chegirma: ${chegirma(summa, 10)} so'm`);

Konsolda:

text
Chegirma: 8000 so'm

Endi chegirma funksiyasini istalgan joyda ishlata olasiz: konsolda, saytda, Telegram botda. Ichida console.log bo'lsa, u faqat konsolga "bog'lanib" qolardi.

Maslahat: Brauzer konsolida salomlash("Ali") kabi funksiyani chaqirsangiz, oxirida kulrang undefined chiqadi. Qo'rqmang, bu xato emas. Konsol har doim chaqiruvning qaytish qiymatini ko'rsatadi. Funksiyada return yo'q bo'lsa, u — undefined.

4. return funksiyani to'xtatadi

4.1 Keyingi kod ishlamaydi

return bajarilishi bilan funksiya darhol tugaydi. Undan keyingi qatorlar bajarilmaydi:

js
function test() {
  console.log("1. Boshlandi");
  return "tayyor";
  console.log("2. Bu hech qachon chiqmaydi");
}

const natija = test();
console.log(natija);

Konsolda:

text
1. Boshlandi
tayyor

returndan keyin yozilgan kod o'lik kod (unreachable code) deyiladi — unga hech qachon navbat kelmaydi. VS Code bunday qatorlarni xira rangda ko'rsatadi.

returnni funksiyadan chiqish eshigi deb tasavvur qiling. Eshikdan chiqdingizmi — ichkarida qolgan ishlar bajarilmaydi.

4.2 Bir nechta return — faqat bittasi ishlaydi

Funksiyada bir nechta return bo'lishi mumkin. Lekin har chaqiruvda faqat bittasi bajariladi — birinchi yetib kelingani.

Universitetdagi baholash tizimini yozamiz:

js
function bahola(ball) {
  if (ball >= 86) {
    return "a'lo";
  }
  if (ball >= 71) {
    return "yaxshi";
  }
  if (ball >= 55) {
    return "qoniqarli";
  }
  return "qoniqarsiz";
}

console.log(bahola(92));
console.log(bahola(75));
console.log(bahola(40));

Konsolda:

text
a'lo
yaxshi
qoniqarsiz

Bu yerda else yozmadik — kerak emas. ball = 92 bo'lsa, birinchi return funksiyani to'xtatadi. Keyingi iflarga navbat kelmaydi. Oxirgi return "qoniqarsiz"ga faqat hech bir shart bajarilmaganda yetib kelinadi.

4.3 Sikl ichidan return

return sikl ichida ham ishlaydi. U sikldan ham, butun funksiyadan ham birdaniga chiqaradi. Parolda raqam bor-yo'qligini tekshiramiz:

js
function raqamBormi(matn) {
  for (const belgi of matn) {
    if (belgi >= "0" && belgi <= "9") {
      return true;
    }
  }
  return false;
}

console.log(raqamBormi("toshkent2026")); // true
console.log(raqamBormi("toshkent")); // false

Birinchi chaqiruvda sikl "2" belgisiga yetgach, return true ishlaydi. Qolgan belgilar tekshirilmaydi ham — javob allaqachon ma'lum. return falsega esa faqat sikl oxirigacha aylanib, raqam topmaganda yetib kelinadi.

break faqat sikldan chiqaradi va funksiya davom etadi. return esa butun funksiyani tugatadi.

Ichma-ich sikllarda bu ayniqsa qulay. break darsidagi seyf misolini eslang: ikkala sikldan birdaniga chiqish uchun label kerak edi. Funksiya ichida esa label shart emas — return ikkala sikldan ham darhol chiqaradi:

js
function kodniTop(sirliKod) {
  for (let a = 0; a <= 9; a++) {
    for (let b = 0; b <= 9; b++) {
      if (a * 10 + b === sirliKod) {
        return `${a}${b}`;
      }
    }
  }
  return "topilmadi";
}

console.log(kodniTop(37)); // 37

Tekshirib ko'ring: Konsolda nima chiqadi?

js
function belgi(x) {
  if (x > 0) {
    return "musbat";
  }
  console.log("tekshirildi");
  return "musbat emas";
}
console.log(belgi(5));
console.log(belgi(-2));
Javob
text
musbat
tekshirildi
musbat emas

belgi(5) da birinchi return ishladi, console.log("tekshirildi")ga navbat kelmadi. belgi(-2) da shart bajarilmadi, shuning uchun funksiya pastga davom etdi: avval "tekshirildi", keyin "musbat emas" qaytdi.

5. returnsiz funksiya undefined qaytaradi

JavaScript'da har bir funksiya chaqiruvi nimadir qaytaradi. Siz qiymat ko'rsatmasangiz — undefined. Buning uch holati bor:

js
function a() {
  console.log("a ishladi");
}

function b() {
  return;
}

function c(x) {
  if (x > 0) {
    return "musbat";
  }
}

console.log(a());
console.log(b());
console.log(c(-1));

Konsolda:

text
a ishladi
undefined
undefined
undefined
  1. a — umuman return yo'q. Funksiya oxirigacha ishlab, undefined qaytaradi.
  2. b — return; qiymatsiz yozilgan. Funksiya to'xtaydi va undefined qaytaradi.
  3. c — return bor, lekin faqat x > 0 bo'lganda. -1 uchun unga yetib kelinmadi.

Uchinchi holat ayniqsa xavfli. Bir shart uchun return yozasiz-u, boshqasini unutasiz. Funksiya ba'zan ishlaydi, ba'zan undefined beradi.

O'zingiz to'ldiring: function f() { let x = 5; } funksiyasi chaqirilsa, f() ning qaytish qiymati [:undefined] bo'ladi. function g() { return 5; } uchun esa g() + 1 ning qiymati [:6] ga teng.

6. Erta qaytish (early return)

6.1 Muammo: ichma-ich if "piramidasi"

Click'ga o'xshash to'lov tizimi uchun tekshiruv funksiyasini yozamiz. To'lov qabul qilinishi uchun: summa kiritilgan, musbat va balansdan oshmagan bo'lishi kerak.

js
function tolovHolati(summa, balans) {
  if (summa !== undefined) {
    if (summa > 0) {
      if (summa <= balans) {
        return "To'lov qabul qilindi";
      } else {
        return "Mablag' yetarli emas";
      }
    } else {
      return "Summa musbat bo'lishi kerak";
    }
  } else {
    return "Summani kiriting";
  }
}

console.log(tolovHolati(50000, 100000)); // To'lov qabul qilindi

Kod ishlaydi, lekin o'qish qiyin. Qaysi else qaysi ifga tegishli? Asosiy natija — "To'lov qabul qilindi" — eng chuqurda, uch qavat ichida yashiringan. Xato xabari esa undan ancha pastda, o'z shartidan uzoqda turibdi.

6.2 Yechim: avval noto'g'ri holatlardan chiqib ketish

js
function tolovHolati(summa, balans) {
  if (summa === undefined) {
    return "Summani kiriting";
  }
  if (summa <= 0) {
    return "Summa musbat bo'lishi kerak";
  }
  if (summa > balans) {
    return "Mablag' yetarli emas";
  }
  return "To'lov qabul qilindi";
}

console.log(tolovHolati());
console.log(tolovHolati(-500, 100000));
console.log(tolovHolati(50000, 20000));
console.log(tolovHolati(50000, 100000));

Konsolda:

text
Summani kiriting
Summa musbat bo'lishi kerak
Mablag' yetarli emas
To'lov qabul qilindi

Erta qaytish (early return) — noto'g'ri holatlarni funksiya boshida tekshirib, darhol return bilan chiqib ketish. Bunday tekshiruv shartlari guard clause ("qo'riqchi shart") deb ataladi. Bu atamani if / else darsida ham eshitgansiz.

Aeroportdagi tekshiruvga o'xshaydi. Avval pasport, keyin bagaj, keyin chipta tekshiriladi. Qaysidir bosqichda muammo chiqsa — yo'lovchi darhol qaytariladi. Hammasidan o'tganlargina samolyotga chiqadi.

Nima yutdik:

  • Hech qanday ichma-ichlik yo'q — kod chapda tekis turadi.
  • Har bir shart va uning xabari yonma-yon.
  • Asosiy natija oxirida, hech narsa bilan o'ralmagan.
  • Yangi tekshiruv qo'shish uchun yana bitta if yozish kifoya.

6.3 Qiymatsiz return; bilan erta chiqish

Funksiya hech narsa qaytarmasa ham, erta chiqish foydali. O'tgan darsdagi taksi mashqini eslang — u yerda if...else ishlatgandik. Endi else kerak emas:

js
function taksiHisobla(km, tarif = 2500) {
  if (km === undefined) {
    console.log("Masofani kiriting");
    return;
  }
  console.log(`${km} km: ${km * tarif} so'm`);
}

taksiHisobla();
taksiHisobla(4);

Konsolda:

text
Masofani kiriting
4 km: 10000 so'm

Qiymatsiz return; shunchaki "shu yerda to'xta" degani.

Tekshirib ko'ring: Guard clause'li yangi tolovHolati funksiyasida oxirgi return "To'lov qabul qilindi" oldida nega if yo'q?

Javob

Chunki unga faqat barcha tekshiruvlardan o'tgan holatda yetib kelinadi. Summa yo'q bo'lsa, manfiy bo'lsa yoki balansdan oshsa — funksiya undan oldinroq return bilan chiqib ketgan bo'lardi. Shu qatorga yetib keldikmi — demak hammasi joyida.

7. Bir nechta qiymat qaytarish mumkinmi?

return faqat bitta qiymat qaytaradi. Ikkita qiymatni vergul bilan yozsangiz, xato chiqmaydi — lekin natija kutganingizdek bo'lmaydi:

js
function narxVaSoni() {
  return 5000, 3;
}

console.log(narxVaSoni()); // 3

Bu yerda vergul vergul operatori sifatida ishladi: u ikkala qiymatni hisoblaydi, lekin faqat oxirgisini qoldiradi. 5000 yo'qolib ketdi.

Bir nechta qiymat kerak bo'lsa, ular bitta "quti"ga — massiv yoki obyektga solinib qaytariladi. Ikkalasini ham tez orada o'rganamiz.

8. Ko'p uchraydigan xatolar

8.1 returnni unutish

js
function salomMatni(ism) {
  `Salom, ${ism}!`;
}

const matn = salomMatni("Ali");
console.log(matn.toUpperCase());
text
TypeError: Cannot read properties of undefined (reading 'toUpperCase')

Tarjimasi: "undefinedning xususiyatlarini o'qib bo'lmaydi (toUpperCaseni o'qishda)". Funksiya satrni hosil qildi-yu, qaytarmadi. matn — undefined, uning esa .toUpperCase() metodi yo'q. Yechim — satr oldiga return qo'yish: return `Salom, ${ism}!`;

Kutilmagan undefined yoki NaN ko'rsangiz, birinchi savol: "funksiyada return bormi? Balki u yerda console.log turibdimi?"

8.2 returndan keyin yangi qator

Bu JavaScript'ning mashhur tuzog'i:

js
function chegirmaMatni(foiz) {
  return
    `Bugun ${foiz}% chegirma!`;
}

console.log(chegirmaMatni(20)); // undefined

Xato ham chiqmadi, satr ham qaytmadi. Nega? Sintaksis asoslari darsida ko'rgan ASI (nuqtali vergulni avtomatik qo'yish) aybdor. return so'zidan keyin qator tugasa, JavaScript "fikr shu yerda tugadi" deb o'ylaydi va u yerga yashirincha ; qo'yib ketadi. Natijada kod return; ga aylanadi, satr esa o'lik kodga.

Qoida: qaytariladigan qiymat return bilan bitta qatordan boshlansin. Ifoda uzun bo'lsa, qavsni return qatorida oching:

js
function chegirmaMatni(foiz) {
  return (
    `Bugun ${foiz}% chegirma!`
  );
}

console.log(chegirmaMatni(20)); // Bugun 20% chegirma!

8.3 return funksiyadan tashqarida

js
const narx = 5000;

if (narx > 1000) {
  return "qimmat";
}
text
SyntaxError: Illegal return statement

"Noqonuniy return" — return faqat funksiya ichida ishlaydi. Oddiy if yoki sikldan chiqish uchun u yaramaydi. Sikldan chiqish uchun break, qiymatni saqlash uchun o'zgaruvchi ishlating.

8.4 returndan keyin kod yozish

returndan keyin console.log yoki hisob yozib, "nega ishlamayapti?" deb hayron bo'lish ham tez-tez uchraydi. Funksiya returnda tugaydi. Oxirida biror ish qilish kerak bo'lsa, uni returndan oldin yozing.

9. Mashqlar

1-mashq (oson): Yosh hisoblash

yoshHisobla funksiyasini yozing. U tug'ilgan yil va joriy yilni olib, yoshni qaytarsin. Joriy yil berilmasa, 2026 deb olinsin. Natijani funksiya tashqarisida chiqaring: Malika 19 yoshda.

Yechim
js
function yoshHisobla(tugilganYil, joriyYil = 2026) {
  return joriyYil - tugilganYil;
}

const yosh = yoshHisobla(2007);
console.log(`Malika ${yosh} yoshda`); // Malika 19 yoshda
console.log(yoshHisobla(2000, 2030)); // 30

Funksiya faqat hisoblaydi. Chiqarish — chaqirgan kodning ishi. Shuning uchun natijani ham matnda, ham alohida ishlata oldik.

2-mashq (o'rta): Chegirmali narx

Ikki funksiya yozing:

  • chegirmaliNarx(narx, foiz) — chegirmadan keyingi narxni qaytaradi.
  • somda(summa) — "85000 so'm" ko'rinishidagi satrni qaytaradi.

So'ng ikkalasini ulab, 100 000 so'mlik mahsulotning 15% chegirmadagi narxini chiqaring.

Yechim
js
function chegirmaliNarx(narx, foiz) {
  return narx - (narx * foiz) / 100;
}

function somda(summa) {
  return `${summa} so'm`;
}

console.log(somda(chegirmaliNarx(100000, 15))); // 85000 so'm

Avval ichkaridagi chegirmaliNarx(100000, 15) ishlaydi va 85000 qaytaradi. Keyin shu son somda ga argument bo'lib boradi.

3-mashq (qiyin): Parol tekshiruvchisi

parolTekshir(parol) funksiyasini erta qaytish bilan yozing. U quyidagi tartibda tekshirib, bitta xabar qaytarsin:

  1. Parol berilmagan yoki bo'sh satr — "Parol kiritilmagan".
  2. 8 belgidan qisqa — "Juda qisqa".
  3. Ichida raqam yo'q — "Raqam qo'shing" (sikl ichidan return misolidagi raqamBormi funksiyasidan foydalaning).
  4. Katta harf yo'q — "Katta harf qo'shing". Maslahat: parol o'zining toLowerCase() ko'rinishiga teng bo'lsa, unda katta harf yo'q.
  5. Aks holda — "Kuchli parol".
Yechim
js
function raqamBormi(matn) {
  for (const belgi of matn) {
    if (belgi >= "0" && belgi <= "9") {
      return true;
    }
  }
  return false;
}

function parolTekshir(parol) {
  if (parol === undefined || parol === "") {
    return "Parol kiritilmagan";
  }
  if (parol.length < 8) {
    return "Juda qisqa";
  }
  if (!raqamBormi(parol)) {
    return "Raqam qo'shing";
  }
  // bitta katta harf bo'lsa ham, toLowerCase uni
  // kichraytiradi va ikki satr teng bo'lmay qoladi
  if (parol === parol.toLowerCase()) {
    return "Katta harf qo'shing";
  }
  return "Kuchli parol";
}

console.log(parolTekshir());
console.log(parolTekshir("abc1"));
console.log(parolTekshir("samarqand"));
console.log(parolTekshir("samarqand7"));
console.log(parolTekshir("Samarqand7"));

Konsolda:

text
Parol kiritilmagan
Juda qisqa
Raqam qo'shing
Katta harf qo'shing
Kuchli parol

Tartib muhim: birinchi tekshiruv parol.length dan oldin turibdi. Aks holda parolTekshir() chaqirilganda undefined.length ni o'qishga urinib, TypeError chiqardi. Guard clause'lar shunday ham himoya qiladi.

10. Real ishda

  • Deyarli har bir funksiya return qiladi. Real loyihalarda console.log faqat xatoni qidirish (debug) uchun vaqtincha yoziladi.
  • Backend: serverdagi so'rovni qayta ishlovchi funksiyalar erta qaytish bilan to'la: "foydalanuvchi topilmadi — qaytar", "ruxsat yo'q — qaytar".
  • React: komponent — ekranda nima ko'rinishini qaytaradigan funksiya.
  • Testlar: Vitest, Jest kabi vositalar funksiya qaytargan qiymatni tekshiradi. Faqat console.log qiladigan funksiyani test qilish juda qiyin.
  • Code review: "bu yerni early return bilan yozing" — tajribali dasturchilardan eng ko'p eshitiladigan izohlardan biri. ESLint vositasida ham no-else-return va no-unreachable qoidalari bor.

Intervyuda ko'p so'raladi: "return va console.log farqi nima?" va "returndan keyin yangi qator qo'ysak nima bo'ladi?". Endi ikkalasiga ham javob bera olasiz.

Xulosa

  • return natijani chaqirilgan joyga qaytaradi — uni saqlash, hisobda ishlatish, boshqa funksiyaga berish mumkin.
  • console.log — odamga ko'rsatish uchun, return — kodga berish uchun.
  • return funksiyani darhol to'xtatadi. Undan keyingi kod — o'lik kod.
  • returnsiz yoki qiymatsiz return; bilan funksiya undefined qaytaradi.
  • Erta qaytish: noto'g'ri holatlarni boshida tekshirib chiqib keting — kod tekis va tushunarli bo'ladi.
  • Qaytariladigan qiymat return bilan bitta qatordan boshlansin.

Keyingi dars: Function expression va arrow funksiyalar — funksiyani o'zgaruvchiga saqlashni va qisqa => yozuvini o'rganamiz.

Ulashish:Telegram'da

Izohlar (0)

Izoh yozish uchun kiring.

  • Hozircha izoh yo'q. Birinchi bo'ling!
JavaScript return: funksiyadan qiymat qaytarish va erta qaytish — IlmHamroh