Funksiyalar va arrow function

1
Mirzo Ulug'bek nomidagi O'zbekiston Milliy 
universiteti  Amaliy matematika va 
intellektual texnologiyalar 
fakulteti 
“Kompeyutir ilmlari va dasturlash texnologiyalari yo‘nalishi
(masofaviy)” kafedrasi 
“Web dasturlash ” fanidan 
Kurs ishi 
Mav zu: Funk siy alar v a arrow  funct ion 
Toshk ent  - 2026 y il  2 
MUN DA RIJ A  
KIRISH … … … … … … … … … … … … … … … … … … … … … … … … … … … … ....3 I-BOB: 
ODDIY  FUN KSIY A LA R (REGULA R FUN CTION S) 
1.1. Funksiya yaratish va chaqirish……………………………………………….6 1.2. 
Parametrlar va return qiymati…………………………………………………12 1.3. 
Lokal va global o‘zgaruvchilar, funksiyalarni qayta 
ishlatish………………..25  II-BOB: A RROW FUN CTION S ( ) →
2.1. Arrow function tushunchasi va sintaksisi…………………………………..30 
2.2. Parametrlar, return va qisqartirilgan yozilish…………………………………
36  X ULOSA … … … … … … … … … … … … … … … … … … … … … … … … … … … … 38 
FOY DA LA N ILGA N  ADA BIY OTLA R… … … … … … … … ..… … … … … … … 40  3 
KIRISH 
Funksiyalar dasturlashning eng asosiy va markaziy tushunchalaridan
biridir. Ular dastur kodini modul va qayta ishlatiladigan bo‘limlarga 
ajratish, takrorlanuvchi amallarni soddalashtirish va murakkab 
tizimlarni boshqarishni osonlashtirish imkonini beradi. Funksiyalar 
dasturlash jarayonida kodni yanada tushunarli, ixcham va samarali 
qilishga xizmat qiladi. Tarixan, dasturlash tillarida funksiyalar konsepti 
oldingi asrlardan boshlangan bo‘lsa-da, JavaScript tilida ular web-
ilovalar va interaktiv foydalanuvchi interfeyslarini yaratishda muhim 
vosita hisoblanadi. 
JavaScript   dasturlash   tili   1995-yilda   Brendan   Eich   tomonidan
yaratilgan   bo‘lib,   dastlab   Netscape   Navigator   brauzeri   uchun
mo‘ljallangan edi. Bugungi kunda JavaScript web-dasturlashning asosiy
tili   sifatida   dunyo   miqyosida   keng   qo‘llaniladi.   JavaScriptning   asosiy
afzalliklaridan   biri   uning   funksional   dasturlash   paradigmasini   qo‘llab-
quvvatlashi   va   funksiyalarni   birinchi   darajali   obyekt   sifatida   ishlatish
imkonini   berishidir.   Bu   degani,   funksiyalar   nafaqat   qiymat   sifatida
uzatilishi, balki o‘zaro parametr sifatida qabul qilinishi va natija sifatida
qaytarilishi   mumkin.   Shuning   uchun,   funksiyalarni   to‘g‘ri   tushunish   va
qo‘llash dasturchilar uchun muhim ko‘nikmalardan biridir. 
Funksiyalar ikki asosiy turga bo‘linadi:  oddiy  funk siy alar (regular 
funct ions)  va  arrow  funct ions ( )→ . Oddiy funksiyalar JavaScript tilining
dastlabki versiyalaridan beri mavjud bo‘lib, ular an’anaviy deklaratsiya 
va chaqirish sintaksisiga ega. Oddiy funksiyalar parametrlarni qabul 
qilish, natija qaytarish va lokal hamda global o‘zgaruvchilar bilan ishlash
imkonini beradi. Ular dastur kodini modul tarzida tashkil qilishda keng 
qo‘llaniladi. Oddiy funksiyalarning sintaksisi aniq va tushunarli bo‘lib, 
dasturchilar tomonidan keng qo‘llanadi. Shu bilan birga, oddiy 
funksiyalarning this konteksti murakkab bo‘lishi mumkin, ayniqsa 
callback yoki event handlerlarda.  Arrow   functionlar   esa   2015-yilda   ECMAScript   6   standarti   bilan
JavaScriptga   kiritilgan   va   sintaksisi   soddalashtirilgan   funksiyalar   turini
ifodalaydi.   Arrow   functionning   asosiy   afzalligi   uning   qisqa   yozilishi   va
this   kontekstini   oddiy   funksiyalardan   farqli   ravishda   meros   qilib   olishi
bilan bog‘liq. Bu esa, ayniqsa,  4 
callback funksiyalar yoki array metodlari (map, filter, reduce) bilan 
ishlashda qulaylik yaratadi. Arrow functionlar zamonaviy JavaScript 
dasturchilari orasida tez-tez qo‘llanadi, chunki ular kodni ixcham va 
samarali qilishga yordam beradi. 
Funksiyalar   va   arrow   functionlarni   o‘rganishning   nafaqat   nazariy,
balki   amaliy   ahamiyati   ham   katta.   Web-ilovalarda   foydalanuvchi   bilan
muloqot,   ma’lumotlarni   qayta   ishlash,   interaktiv   interfeys   yaratish   va
tizimlarni   modul   tarzda   tashkil   qilishda   funksiyalar   ajralmas   vosita
hisoblanadi. Misol uchun, forma validatsiyasi, foydalanuvchi inputlarini
qayta   ishlash,   serverga   so‘rov   yuborish   va   natijalarni   qayta   ishlash
jarayonlarida   funksiyalar  asosiy   rol  o‘ynaydi.   Shu   sababli,   funksiyalarni
chuqur   tushunish   dasturchilarga   samarali   va   xavfsiz   web-loyihalarni
yaratishda yordam beradi. 
Kirish   qismida,   shuningdek,   funksiyalarning   dasturlash   jarayonida
erkinlik   va   samaradorlikni   oshirishdagi   roli   ham   ko‘rib   chiqiladi.
Funksiyalar kodni modul va qayta ishlatiladigan qismlarga bo‘lish orqali
murakkab   tizimlarni   boshqarishni   osonlashtiradi.   Masalan,   bir   xil
amallarni bajaruvchi kodni bir necha joyda yozish o‘rniga, uni funksiya
sifatida   yaratib,   kerakli   joylarda   chaqirish   mumkin.   Bu   kodning
soddaligi,   tushunarli   va   xatoliklarga   chidamliligini   oshiradi.   Shu   bilan
birga, arrow functionlar yordamida callback funksiyalar va higher-order
funksiyalarni   yaratish   osonlashadi,   bu   esa   zamonaviy   web-ilovalarda
muhim afzallik hisoblanadi. 
Funksiyalarni   o‘rganishning   ilmiy   va   amaliy   jihatlari   ham   katta
ahamiyatga   ega.   Ilmiy   nuqtai   nazardan,   funksiyalar   dasturlash
paradigmasini   tushunishga,   algoritmik   fikrlashni   rivojlantirishga   va
dasturiy   tizimlarni   modul   tarzda   loyihalashga   yordam   beradi.   Amaliy
nuqtai   nazardan,   funksiyalar   web-ilovalarda   samarali   ishlash,   kodni
qayta ishlatish va tizimning xavfsizligini ta’minlash imkonini beradi. Shu
sababli,   funksiyalar   va   arrow   functionlarni   chuqur   tushunish   va   ularni amaliyotda   qo‘llash   har   bir   JavaScript   dasturchisi   uchun   zarur
ko‘nikmalardan biridir. 
Kurs ishining dolzarbligi 
Hozirgi kunda web-dasturlash va interaktiv veb-ilovalar hayotimizda 
muhim o‘rin tutmoqda. JavaScript dasturlash tili esa web-ilovalarning 
asosiy dasturlash tili  5 
sifatida   keng   qo‘llaniladi.   Har   qanday   web-loyihada   samarali   va   qayta
ishlatiladigan   kod   yaratish   muhim   masala   hisoblanadi.   Shu   nuqtai
nazardan,   funk siy alar   v a   arrow   funct ionlar   dasturchilar   uchun
markaziy tushunchalardan biridir. 
Oddiy   funksiyalar   (regular   functions)   kodni   modul   tarzda   yozish   va
qayta   ishlatishni   osonlashtiradi,   arrow   functionlar   esa   sintaksisi   qisqa
va   this   kontekstini   avtomatik   meros   qilib   olishi   bilan   dasturiy
jarayonlarni   soddalashtiradi.   Ushbu   mavzu   zamonaviy   web-dasturlash
va   dasturiy   ta’minot   sifatini   oshirishda   dolzarbdir,   chunki
funksiyalarning   to‘g‘ri   qo‘llanilishi   tizim   samaradorligini,   kodning
tushunarli va xavfsiz bo‘lishini ta’minlaydi. 
Kurs ishining maqsadi 
Ushbu kurs ishining asosiy maqsadi – JavaScript dasturlash tilida 
funksiyalar va arrow functionlarni chuqur o‘rganish, ularning sintaksisi 
va qo‘llanish 
xususiyatla
rini amaliy misollar orqali tahlil qilishdir.
Kurs ishida quyidagilar amalga oshiriladi: 
Kurs ishining v azifalari 
1.JavaScriptda funksiyalar tushunchasi va turlarini aniqlash; 
2.Oddiy funksiyalar (regular functions) sintaksisi, parametrlar va 
return qiymatlarini tahlil qilish; 
3.Arrow functionning sintaksisi, qisqartirilgan yozilishi va this 
konteksti bilan farqlarini tushuntirish; 
4.Funksiyalarni array metodlari (map, filter, reduce) va callback 
funksiyalarda qo‘llash imkoniyatlarini o‘rganish; 
Kurs ishining oby ek t i 
– JavaScript dasturlash tilida funksiyalar va arrow functionlar bo‘lib, 
ular web-loyihalarda kodning modul tarzda ishlatilishi va 
samaradorligini ta’minlaydi.  Kurs ishining predmet i 
– funksiyalar va arrow functionlarning sintaksisi, qo‘llanilishi, this 
konteksti va amaliy misollar orqali o‘rganilishidir. Predmet kurs ishida 
tahlil qilinadigan va chuqur o‘rganiladigan mavzu bo‘lib xizmat qiladi.  6 
I-BOB: ODDIY  FUN KSIY A LA R (REGULA R FUN CTION S) 
1.1. Funk siy a y arat ish v a chaqirish 
Funksiya qiymat qaytarish turiga qarab ikkiga bo’linadi : qiymat 
qaytaradigan va qaytarmaydigan funksiyalar. 
Qiymat   qaytaradigan   funksiya   bu   kabi   funksiyada   return   kalit
so’zidan   foydalangan   holda   biror   natija   qaytariladi   va   funksiya   void
turida   bo’lmaydi.   Qaytarilgan   natija   ekranga   chiqarilishi   yoki   biror
o’zgaruvchiga   qiymat  sifatida   o’zlashtirib   olib  foydalanish   imkoniyatiga
ega. 
Ikki sondan kattasini topib, natijasini qaytaruvchi funksiyani ko’rib 
o’taylik. 
void main () { 
print(Max( 2 ,  3 ));
}
int Max ( int  a,  int  b) {
var  natija;
if  (a < b) {
natija = b;
}  else  {
natija = a;
}
return  natija;
}
>> 3
Max   nomli   funksiya   yaratilmoqda   va   unga   2   ta   parametr   berib
ketilmoqda.   Unda   nat ija   nomli   o’zgaruvchi   eng   katta   qiymatni   o’zida
saqlashi   uchun   yaratilmoqda.   Keyin   esa   a   va   b   qiymatlari   shart
operatori   orqali   solishtirilib,   eng   katta   natija   olingan   holatda qaytarilmoqda. Funksiyadan qaytarilgan natijani esa ekranga chiqarish
bajarilmoqda  main  funksiyasida.  7 
Funksiyada qaytarish turini ko’rsatmasligimiz ham mumkin. Bunda 
ret urn  kalit so’zi bilan kelgan ifoda qiymatidan aniqlab olinadi. 
void main () {
print ( site ().runtimeType);
}
site () {
return "uzbekdevs.uz" ;
}
>> St ring
Funksiyadan qaytayotgan qiymat “uzbekdevs.uz” satr bo’lgani 
uchun uning turini aniq ko’rsak ham String deb bermoqda. Ya’ni o’zi 
avtomatik aniqlanyabdi.  Yodda tuting! 
return kalit so’zi ishlagan vaqtda funksiya ishlashi ham to’xtatiladi 
va funksiya o’z ish jarayonini yakunlaydi. 
Qiymat qaytarmaydigan funksiya o’z nomidan kelib chiqadiki, ular
qiymat   qaytarmaydi   va   void   turida   ifodalanadi.   Biz   bunga   oldingi
Funksiya   mavzumizda   turli   berilgan   misollarni   ko’rsata   olamiz.   void
turida berilgan funksiyalar qaytish turi aslida null bo’lad. 
void main () {
site();
}
void site () {
print( "UzbekDevs" );
return null ;
}
Funksiyaning qisqa shakli  8 
Arrow funksiyalar bu funksiyaning qisqacha yozish shakli bo’lib, funksiya
bitta ifodadan iborat bo’lganda bu usul ishlatiladi va return kalit so’zini 
ishlatish kerak emas. Sintaksisi : tur funksiya_nomi(parametrlar) => 
ifoda; 
Yuqorida ko’rib o’tgan misolimizni bu shaklini ko’radigan bo’lsak, 
void main () {
print(Max( 2 ,  3 ));
}
int Max ( int  a,  int  b) => a > b ? a : b;
>> 3
Funksiyani ishlash jarayonida biz qaysidir holatda to’xtatishimiz 
kerak bo’lsa (void turidagi asosan), return; ifodasini qo’llaymiz. 
Foydalanuvchi   yoshini   18   yoshdan   kichik   emasligini   tekshiruvchi
dastur   tuzaylik.   18   dan   kichik   bo’lsa,   funksiya   ishlamasin   aks   holda
natija chiqarsin ekranga. 
void  main () { 
Age ( 17 );
Age ( 25 );
}
void  Age (int yosh) {
if (yosh <  18 ) {
return;
}
print ("Siz yosh chekloviga to'g'ri kelasiz");
}
>> Siz y osh chek lov iga t o’g’ri k elasiz
Ko’rib turganingizdek, faqatgina bitta natija chiqmoqda, ammo biz 
funksiyaga 2 marotaba murojaat qildik. Birinchi murojaatda yosh 
cheklovi  9 
uchun mos tushmay funksiya to’xtatildi. Ikkinchi murojaatda esa cheklov
uchun mos tushdi yosh. 
Ichki funksiyalar 
Funksiyalar ichida boshqa funksiyalarni joylashtira olamiz. 
void  main () {
void  site () {
print ("UzbekDevs");
}
site ();
site ();
}
>> Uzbek Dev s 
>> Uzbek Dev s
Funksiya ichida ishlatilgan o’zgaruvchi lokal hisoblanadi va biz unda 
funksiyadan tashqarida turib ishlata olmaymiz. Funksiya ichidagi 
funksiyani ishlatish uchun u avval e’lon qilingan va keyin unga murojaat 
etilishi kerak. Yuqoridagi kabi. Har bir ichki funksiyada yana ichki 
funksiya joylashishi mumkin. 
void  main () { 
void  xabar () {
void  site () {
print ("UzbekDevs");
}
site ();
site ();
}
xabar ();
} 10 
>> Uzbek Dev s 
>> Uzbek Dev s
Anonim funksiyalar 
Anonim funksiyalar odatiy funksiyalarga o’xshaydi, faqatgina ular 
nomlanmagan bo’ladi. Ular  Funct ion  kalit so’zi orqali yaratiladi. 
Ikki son yig’indisini topuvchi anonim funksiya yarataylik. 
void  main() {
Function sum  = ( int  a,  int  b) => a + b;
print (sum( 2 ,  3 ));
}
>> 5
Hozir biz funksiya arrow funksiya uslubida yozdik, ammo to’liq 
holatda qanday ko’rinishda bo’ladi : 
void  main() {
Function  sum  = ( int  a,  int  b) {
return  a + b;
};
print ( sum ( 2 ,  3 ));
}
1.2. Paramet rlar v a ret urn qiy mat i 
Funksiya argumentlari 
Pythonʼda funksiyalar har xil turdagi argumentlar bilan ishlashi 
mumkin. Bu tilni moslashuvchan qilib, turli vazifalar bajarish imkonini 
beradi. 
Pozitsion  11 
Bu   tur  eng  koʻp  uchraydi.   “Tarix”,   “Adabiyot”,   “Dasturlash”  kabi  turli
boʻlimlar mavjud boʻlgan kitob doʻkonini tasavvur qiling. Xodimlar yangi
kitoblarni   tegishli   boʻlimlarga   joylashtiradi.   Shu   tarzda   kerakli   kitobni
topish osonroq boʻladi. 
Bu yerda ham shunday: qiymatlar funksiyaga unda koʻrsatilgan 
tartibda uzatiladi. Aks holda, xato yuzaga keladi. Agar funksiya bir 
nechta argumentlarni qabul qilsa, vergul bilan ularni ajratish kerak: 
# Funksiya quyidagi tartibda ikki argumentni qabul qiladi: boʻlim va 
kitobdef search (section, book): print ('kitobingiz: ', section, book) # 
Maʼlumotlarni ham xuddi shu tartibda uzatamiz search ('Tarix', 'Rossiya 
davlati tarixi') 
Nomlanganlar 
Funksiyani chaqirishda parametr nomlaridan foydalanilganda 
argumentlarni tasodifiy tartibda uzatish mumkin. 
# Funksiya ikkita argumentni quyidagi tartibda qabul qiladi: boʻlim 
va kitob  def search(section, book): 
 print('Kitobingiz: ', section, book)  
# Maʼlumotlarni ham ayni tartibda uzatamiz 
search('Tarix','Rossiya davlati tarixi') 
Oʻzgaruvchan uzunlik argumentlari (*args va **kwargs) 
Python nechta argumentni qabul qilishi kerakligini bilmasak ham 
funksiyalarni aniqlash imkonini beradi: 
*args 
nechta pozitsion argumenti
miz borligi nomaʼlum boʻlganda
ishlatiladi. args oldidagi yulduzcha * funksiya chaqirilganda uzatilgan 
barcha 
pozitsion
argumentlar tuple kortejiga
toʻplanishi  va
unga args tayinlanishi
yulduzcha ( ** ) barcha nomlang  12 
Masalan, *args va **kwargs yordamida odamlar bilan ismlari va 
haqidagi qoʻshimcha maʼlumotlardan foydalanib
salomlashadigan greet funksiyasini yaratamiz.
def greet(greeting, *args, **kwargs): 
 for name in args: 
 message = f'{greeting}, {name}!' 
 if 'mood' in kwargs: 
 message += f 'Oʻzingni {kwargs['mood']} his 
qilyapsan.'   print(message) 
# Oʻrnak 
greet('Salom', 'Katya', 'Lena', 'Vika', mood= 'vaqtichogʻ') 
greet('Salom', 'Sasha', 'Tanya') 
greet 
funksiyasi salomlashish,
*args nomlar roʻyxati va 
**kwargsʼning
qoʻshimcha   parametrlarini   qabul   qiladi.   argsʼdagi   har   bir   nom   orqali
oʻtadi   va   salomlashish   xabarini   shakllantiradi.   Agar   kwargsʼda   mood
kaliti boʻlsa, xabarga kayfiyat haqida maʼlumot qoʻshiladi. 
Ixtiyoriy argumentlar (dastlabki holatdagi parametrlar) 
Baʼzan funksiyalarda dastlabki holatdagi qiymatlar oʻrnatiladi. 
Funksiya ulardan boshqa argumentdan foydalanish kerakligi 
koʻrsatilmagan holatlarda foydalanadi. 
Masalan, agar kitob doʻkoni onlayn ilova shaklida boʻlganida har bir
tashrif  buyuruvchi  bir xil  qutlov xabarini oladi.   Ammo  avtorizatsiyadan
oʻtgan   foydalanuvchilar,   yaʼni   oʻz   maʼlumotlarini   doʻkonga
topshirganlarga shaxsiy qutlov keladi. 
def greet(name = 'Tashrif buyuruvchi', message = 'Salom, 
'):   print(message, name) 
# Funksiyani dastlabki holatdagi qiymatni koʻrsatmasdan 
chaqirish greet()  # Natija: Salom, Tashrif buyuruvchi 
# Dastlabki holat qiymati oʻzgartirilgan funksiyani 
chaqirish greet('Artyom')  # Natija: Salom, Artyom  13 
Bu misolda greet
funksiyasi ikkita argument: 
name va 
oladi.   Message   argumentining   dastlabki   holatdagi   qiymati   Salom,
nameʼda esa — tashrif buyuruvchi. Agar funksiya chaqirilganda qiymat
koʻrsatilmagan boʻlsa, dastlabki holatdagisi ishlatiladi. 
Qiymat va havola orqali uzatish 
Pythonʼda yangi ish boshlayotganlarni tashvishga soladigan keng 
tarqalgan savollardan biri — oʻzgaruvchilar funksiya va metodlarga 
qanday yetkazilishi: qiymat yoki havola orqali? 
Qiymat   orqali   —   funksiyaga   oʻzgaruvchining   oʻzi   emas,   balki   uning
qiymati   nusxasi   uzatilganda.   Demak,   funksiyani   chaqirganda   bu
argumentga oʻzgartirish kiritsangiz, asl oʻzgaruvchiga taʼsir qilmaydi. 
Havola orqali — funksiyaga oʻzgaruvchini oʻz ichiga olgan xotiradagi
obyektga   havola   uzatiladi   va   funksiya   ichida   ushbu   argumentga
kiritilgan har qanday oʻzgarishlar asl oʻzgaruvchida aks etadi. 
Pythonʼda   argumentlar   har   doim   havola   orqali   uzatiladi,   lekin
oʻzgarmas   maʼlumotlar   turi,   masalan,   son   yoki   satrlar   uchun   qiymat
orqali   uzatishdan   foydalanish   mumkin.   Chunki   funksiya   ichidagi
obyektni oʻzgartira olmaysiz. 
Roʻyxat yoki lugʻatlar kabi oʻzgaruvchan maʼlumotlar turi uchun 
funksiya ichida kiritilgan oʻzgarishlar asl obyektda aks etadi. 
Koʻrinib turibdiki, roʻyxatni argument sifatida olganimizda unga 
oʻzgartirish kiritdik va u boshqacha koʻrinishga ega boʻldi. 
Argumentlar sifatida lugʻat 
Lugʻat (**kwargs) yordamida ixtiyoriy miqdordagi nomlangan 
argumentlarni uzatish mumkin. 
Masalan, oʻzgaruvchidan onlayn doʻkonning har bir foydalanuvchisi 
uchun shaxsiy maʼlumotlarni chiqarishda foydalanish mumkin. 
Kimningdir toʻliq ism-sharifi, yoshi va yashash joyi toʻldirilgan boʻladi. 
Dasturlash   mobaynida   bir   xil   ifodalarni,   hisoblash   jarayonlarini
qayta – qayta hisoblashga to`g`ri keladi. Dasturlash tillarida, kompyuter hotirasini   va   dasturchining   vaqtini   tejash   maqsadida,   bunday
takkorlanuvchi jarayonlarni  14 
dasturda ajratib yozib, unga asosiy daturdan, boshqa funksiyalardan 
murojaat qilish imkoniyatlari  keltirilgan. 
Dasturning istalgan qismidan murojaat qilib, bir necha bor ishlatish 
mumkin 
bo`lgan operatorlar guruhiga funksiya deyiladi.
C++   funksiyalar   tili   deyiladi.   Chunki   dasturda   kamida   bitta   main
funksiyasi   bo'ladi.   Asosiy   dastur,   asosiy   funksiya   deganda   aynan
manashu  main  funksiyasini tushunamiz. 
Asosiy dasturdan (yoki chaqiruvchi funksiyadan) xech qanday 
parameter qabul qilib 
olmaydi
gan funksi
yalar
o'zi parametrsiz funksiyalar deyilad
i.
Parame
trsiz funksiy
aning ham 2 xil bo'lishi mumki
n:
1) Asosiy dasturga (yoki chaqiruvchi  funksiyaga)  natijani qaytaruvchi. 
2) void turidagi funksiya bo'lib, asosiy dasturdan (yoki chaqiruvchi 
funksiyadan) xech qanday parametr qabul qilib olmaydi xam, asosiy 
dasturga xech qanday natija  qaytarmaydi  ham. Parametrsiz 
funksiyaga murojaat qilishda dastur tanasida funksiya nomi yoziladi. 
Dasturda funksiya nomi operatorlar kabi ishlatiladi. Parametrsiz 
funksiyada asosiy dasturning barcha global o`zgaruvchilaridan 
foydalanish 
mumkin. 
Global 
o`zgaruvchilar Ham asosiy dasturda, ham funksiyada ishlatish mumkin 
bo'lgan o`zgaruvchilar global o'zgaruvchilar deyiladi. Global 
o'zgaruvchilar asosiy dasturda e`lon qilishi kerak. 
Lokal o`zgaruvchilar 
Faqat funksiyada ishlatish mumkin bo'lgan o'zgaruvchilarga local 
o'zgaruvchilar deyiladi. Ular funksiyada e`lon qilinadi. Funksiyada yana 
bir nechta ichki funksiyalardan   foydalanish mumkin.  Blok ichida e'lon qilingan o'zgaruvchilar, shu blok uchun lokal 
o'zgaruvchilar hisoblanadi. Bu o'zgaruvchilardan  faqat blok ichida 
foydalanish mumkin. 
Parametrli funksiyalar 
Asosiy dasturdan (funksiyada
n) chaqiriluvch
i funksiyaga uzatilgan
parametrlarni qabul qilib  qayta ishlovchi  funksiyalar parametrli 
funksiyalar  15 
deyiladi. 
Qiymat   parametrlar   –   asosiy   dasturdan   funksiyaga   uzatiladigan
o'zgaruvchilar   qiymatlarni   qabul   qilib   oluvchi   parametrlar.   Funksiyaga
murojaat   qilinganida   qiymat   parametrlari   uchun   xotiradan   joy
ajratiladi. Funksiya tugaganida qiymat 
param
etrlari uchun ajratilgan xotira bo'sh
atilad
Ko'rsat
kich parametrlar - asosiy dasturdan funksiyaga uzatil
adiga
o'zgaruvchilar
ning xotiradagi adresi
ni qabul qilib oluvchi para
metrl
Ko'rsatkich parametrlari ustida bajarilgan har qanday o'zgarish, asosiy 
dasturdagi o'zgaruchilarning xotira adresida sodir bo'ladi. (Ya'ni asosiy 
dasturdagi o'zgaruvchi qiymati o'zgaradi) 
Eslatma: Qiymat parametrlari va ko'rsatkich parametrlar toifasi, 
asosiy dasturdagi qiymati  uzatilayotgan  o`zgaruvchilar  toifasi bilan bir
xil  bo`lishi lozim. 
Funksiyadan chiqish 
Ixtiyoriy  funksiyadan chiqish uchun return xizmatchi  so'zi 
ishlatiladi. 
Misol  1 :  To'g'ri burchakli uchburchakning katetlari berilgan. (3, 4), 
(6, 8), (12, 5) bo'lgan xollar  uchun uchburchak gipotenuzasini  
hisoblovchi dastur tuzilsin. 
1) Parametrli funksiya 
#include 
<iost ream.h> 
#include <mat h.h> 
// funk siy a prot ot ipi 
fl oat  hisobla(fl oat  , 
fl oat  ); 
int  main() 
{ 
fl oat  c; 
c = hisobla(3, 4);  cout  << c << endl; 
c = hisobla(6, 8); 
cout  << c << endl; 
c = hisobla(12, 5); 
cout  << c << endl; 16 
sy st em (" pause" ); 
ret urn 0; 
} 
fl oat  hisobla(fl oat  a, fl oat  b) 
{ 
//lok al o'zgaruv chi 
fl oat  nat ija; 
nat ija = sqrt f(a*a  + b*b); 
ret urn nat ija; 
2) void toifasidagi parametrli funksiya 
#include <iost ream.h> 
#include <mat h.h> 
// funk siy a prot ot ipi 
v oid hisobla(fl oat  , fl oat  ); 
int  main() 
{ 
hisobla(3, 4); 
hisobla(6, 8); 
hisobla(12, 5); 
sy st em (" pause" ); 
ret urn 0; 
} 
v oid hisobla(fl oat  a, fl oat  b) 
{ 
fl oat  c; 
c = sqrt f(a*a + b*b); 
cout  << c << endl; 
} 
Misol 2:  Global va lokal o'zgaruvchilarga murojaatni  
o'rganish  17 
#include <iost ream.h> 
int  x = 5; // global o'zgaruv chi 
int  main() 
{ 
int  x = 9; // lok al o'zgaruv chi 
st d::cout  << " lok al  x="  <<   x << st d::endl; 
st d::cout  << " global x="  << ::x << st d::endl; 
sy st em (" pause" ); 
ret urn 0; 
} 
Misol 3:  Kiritilgan  n sonini 3 - darajasini hisoblovchi funksiya  
tuzilsin  #include <iost ream.h> 
v oid k ub (int  *); 
int  main() 
{ 
int  n; 
cout  << " n=" ; cin >> n; 
k ub (&n); 
cout  << " n ning qiy mat i ="  << n << endl; 
sy st em (" pause" ); 
ret urn 0; 
} 
v oid k ub (int  *nPt r) 
{ 
*nPt r = *nPt r * *nPt r * *nPt r; 
} 
Misol 4:  Ikkita son yig'indisini  funksiya orqali hisoblovchi dastur
tuzilsin  #include <iost ream.h> 
// funk siy a prot ot ipi 
int   sum(int  , int ); 18 
v oid sum(int  , int , int  *); 
int   sum(int  *, int  *); 
v oid sum(int  *, int  *, int  *); 
int  main() 
{ 
int  a, b, c; 
cout  << " a=" ; cin >> a; 
cout  << " b=" ; cin >> b; 
c = sum(a, b); 
cout  << " 1-sul nat ijasi="  << c << 
endl; 
sum(a, b, &c); 
cout  << " 2-sul nat ijasi="  << c << 
endl; 
c = sum(&a, &b); 
cout  << " 3-usul nat ijasi="  << c << 
endl; 
sum(&a, &b, &c); 
cout  << " 4-usul nat ijasi="  << c << 
endl; 
sy st em (" pause" ); 
ret urn 0; 
} 
// 1 - usul 
int  sum(int  son1, int  son2) 
{ 
int  nat ija; 
nat ija = son1 + son2; 
ret urn nat ija; 
} 
// 2 - usul  v oid sum(int  son1, int  son2,int  
*nat ija) 
{ 
*nat ija = son1 + son2; 19 
} 
// 3 - usul 
int  sum(int  *son1, int  *son2) 
{ 
int  nat ija; 
nat ija = *son1 + *son2; 
ret urn nat ija; 
} 
// 4 - usul 
v oid sum(int  *son1, int  *son2,int  
*nat ija) { 
*nat ija = *son1 + *son2; 
}
1.3. Lok al v a global o‘zgaruv chilar, funk siy alarni qay t a 
ishlat ish 
O’zgaruvchilar   funksiya   tanasida   yoki   undan   tashqarida   e’lon
qilinishi   mumkin.   Funksiya   ichida   e’lon   qilingan   o’zgaruvchilarga   lokal
o’zgaruvchilar   deyiladi.   Bunday   o’zgaruvchilar   xotiradagi   prog-ramma
stekida   joylashadi   va   faqat   o’zi   e’lon   qilingan   funksiya   tanasida   amal
qiladi.   Boshqaruv   asosiy   funksiyaga   qaytishi   bilan   lokal   o’zgaruvchilar
uchun ajratilgan xotira bo’shatiladi (o’chiriladi). 
Har bir o’zgaruvchi o’zining amal qilish sohasi va yashash vaqti 
xususiyatlari bilan xarakterlanadi. 
O’zgaruvchi   amal   qilish   sohasi   deganda   o’zgaruvchini   ishlatish
mumkin   bo’lgan   programma   sohasi   (qismi)   tushuniladi.   Bu   tushuncha
bilan   o’zgaruvchining   ko’rinish   sohasi   uzviy   bog’langan.   O’zgaruvchi
amal qilish   sohasidan  chiqqanda   ko’rinmay qoladi.   Ikkinchi  tomondan,
o’zgaruvchi   amal   qilish   sohasida   bo’lishi,   lekin   ko’rinmas-ligi   mumkin. Bunda ko’rinish sohasiga ruxsat berish amali «::» yordamida ko’rinmas
o’zgaruvchiga murojat qilish mumkin bo’ladi.  20 
O’zgaruvchining  yashash vaqti  deb, u mavjud bo’lgan programma 
bo’lagining bajarilishiga ketgan vaqt intervaliga aytiladi. 
Lokal   o’zgaruvchilar   o’zlari   e’lon   qilingan   funksiya   yoki   blok
chegarasida ko’rinish sohasiga ega. Blokdagi ichki bloklarda xuddi shu
nomdagi   o’zgaruvchi   e’lon   qilingan   bo’lsa,   ichki   bloklarda   bu   lokal
o’zgaruvchi   ham   amal   qilmay   qoladi.   Lokal   o’zgaruvchi   yashash   vaqti  -
blok   yoki   funksiyani   bajarish   vaqti   bilan   aniqlanadi.   Bu   hol   shuni
anglatadiki,   turli   funksiyalarda   bir-biriga   umuman   bog’liq   bo’lma-gan
bir xil nomdagi lokal o’zgaruvchilarni ishlatish mumkin. 
Quyidagi programmada main() va sum() funksiyalarida bir xil 
nomdagi o’zgaruvchilarni ishlatish ko’rsatilgan. Programmada ikkita 
sonning yig’indisi hisoblanadi va chop etiladi: 
#include <iostream.h> 
// funksiyaprototipi 
int sum (int a;int b); 
int main() 
{ 
 // lokal o’zgaruvchilar 
 int x=r; 
int y=4; 
 cout<<sum (x, y); 
 return 0; 
int sum (int a,int b) 
 // lokal o’zgaruvchi 
 int x=a+b; 
 return x; 
Global o’zgaruvchilar programma matnida funksiya aniqlanishi-dan 
tashqarida e’lon qilinadi va e’lon qilingan joyidan boshlab programma 
oxirigacha amal qiladi. 
#include 
<iostream.h>  int f1(); int f2(); 
int main()  21 
 cout<<f1()<<" "<<f2()<<endl; 
 return 0; 
int f1() 
 return x;// kompilyasiya xatosi ro’y beradi 
int x=10; // global o’zgaruvchi e’loni 
int f2(){ return x*x;} 
YUqorida keltirilgan programmada kompilyasiya xatosi ro’y beradi, 
chunki f1() funksiya uchun x o’zgaruvchisi noma’lum hisob-lanadi. 
Programma   matnida   global   o’zgaruvchilarni   ular   e’lonidan   keyin
yozilgan   ixtiyoriy   funksiyada   ishlatish   mumkin.   SHu   sababli,   global
o’zgaruvchilar   programma   matnining   boshida   yoziladi.   Funksiya
ichidan   global   o’zgaruvchiga   murojat   qilish   uchun   funksiyada   uning
nomi bilan mos tushadigan lokal o’zgaruvchilar bo’lmasligi kerak. Agar
global o’zgaruvchi e’lonida unga boshlang’ich qiymat berilmagan bo’lsa,
ularning   qiymati   0   hisoblanadi.   Global   o’zgaruvchining   amal   qilish
sohasi uning ko’rinish sohasi bilan ustma-ust tushadi. 
SHuni   qayd   etish   kerakki,   tajribali   programma   tuzuvchilar   imkon
qadar   global   o’zgaruvchilarni   ishlatmaslikka   harakat   qilishadi,   chunki
bunday   o’zgaruvchilar   qiymatini   programmaning   ixtiyoriy   joyidan
o’zgartirish   xavfi   mavjudligi   sababli   programma   ishlashida   mazmunan
xatolar yuzaga kelishi mumkin. Bu fikrimizni tasdiqlovchi programmani
ko’raylik. 
# include <iostream.h> 
// global o’zgaruvchi e’loni 
inttest=100; 
void Chop_qilish (void) 
int main () 
 //lokal o’zgaruvchi e’loni 
 int test=10; 
 //global o’zgaruvchi chop qilish funksiyasini  chaqirish  Chop_qilish (); 
 sout<<” Lokal o’zgaruvchi:  <<test<<‘\n’;  22 
 return 0; 
void Chop_qilish(void) 
 cout<< ” Global o’zgaruvchi: ”<<test<<‘\n’; 
Programma boshida test global o’zgaruvchisi 100 qiymati bilan e’lon 
qilinadi. Keyinchalik, main() funksiyasida test nomi bilan lokal 
o’zgaruvchisi 10 qiymati bilan e’lon qilinadi. Programmada, 
Chop_qilish() funksiyasiga murojaat qilinganida, asosiy funksiya 
tanasidan vaqtincha chiqiladi va natijada main() funksiyasida e’lon 
qilingan barcha lokal o’zgaruvchilarga murojaat qilish mumkin 
bo’lmay qoladi. SHu sababli Chop_qili
sh() funksiya
sida global test
o’zgaruvchisining qiymatini chop etiladi. Asosiy programmaga 
qaytilgandan keyin, main() funksiyasidagi lokal test o’zgaruvchisi global 
test o’zgaruvchisini «berkitadi» va lokal test o’zgaruvchini qiymati chop 
etiladi. Programma ishlashi natijasida ekranga quyidagi natijalar chop 
etiladi: 
Global o’zgaruvchi: 100 
Lokal o’zgaruvchi: 10 
:: amali 
YUqorida qayd qilingandek, lokal o’zgaruvchi e’loni xuddi shu 
nomdagi global o’zgaruvchini «berkitadi» va bu joydan global 
o’zgaruvchiga murojat qilish imkoni bo’lmay qoladi. S++ tilida bunday 
holatlarda ham global o’zgaruvchiga murojat qilish imko-niyati saqlanib
qolingan. Buning uchun «ko’rinish sohasiga ruxsat berish» amalidan 
foydalanish mumkin va o’zgaruvchi oldiga ikkita nuqta - «::» qo’yish 
zarur bo’ladi. Misol tariqasida quyidagi programani keltiramiz: 
#include <iostream.h > 
//global o’zgaruvchi e’loni 
int uzg=5; 
int main() 
//lokal o’zgaruvchi e’loni 
 int uzg=70;   //lokal o’zgaruvchini chop etish 
 cout<<uzg<<‘/n’;  23 
 //global o’zgaruvchini chop etish 
 cout<<::uzg <<’/n’; 
 return 0; 
Programma ishlashi natijasida ekranga oldin 70 va keyin 5 sonlari 
chop etiladi. 
X ot ira sinfl ari 
O’zgaruvchilarning ko’rinish sohasi va amal qilish vaqtini aniqlovchi 
o’zgaruvchi modifikatorlari mavjud (5.1-jadval). 
1. -jadval. O’zgaruvchi modifikatorlari 
Modifi k at or Qo’llanishi
A mal qilish
sohasi Y ashash 
dav ri
auto lokal blok Vaqtincha
register lokal blok Vaqtincha
exteru global blok Vaqtincha
static lokal blok Doimiy
global fayl Doimiy
volatile global fayl Doimiy
Av t omat  o’zgaruv chilar.  auto modifikatori lokal o’zgaruvchilar 
e’lonida ishlatiladi. Odatda lokal o’zgaruvchilar e’lonida bu modifikator 
kelishuv bo’yicha qo’llaniladi va shu sababli amalda uni yozishmaydi: 
#include <iostream.h> 
int main() 
 auto int X=2; // int X=2; bilan ekvivalent 
cout<<X; 
returu 0; 
auto modifikatori blok ichida e’lon qilingan lokal o’zgaruvchi-larga 
qo’llaniladi. 
Bu o’zgaruvchilar blokdan chiqishi bilan avtoma-tik ravishda yo’q bo’lib 
ketadi.  Regist r o’zgaruv chilar.  register modifikatori kompilyatorga, 
ko’rsatilgan o’zgaruvchini protsessor registrlariga joylashtirishga 
harakat qilishni tayinlaydi.  24 
Agar bu harakat natija bermasa o’zga-ruvchi auto turidagi lokal 
o’zgaruvchi sifatida amal qiladi. 
O’zgaruvchilarni   registrlarda   joylashtirish   programma   kodini
bajarish  tezligi bo’yicha  optimallashtiradi,  chunki  protsessor xotiradagi
berilganlarga   nisbatan   registrdagi   qiymatlar   bilan   ancha   tez   ishlaydi.
Lekin   registrlar   soni   cheklanganligi   uchun   har   doim   ham
o’zgaruvchilarni registrlarda joylashtirishning iloji bo’lmaydi. 
#include < iostream.h > 
int main() 
 register int Reg; 
 return 0; 
registermodifikatori faqat lokal o’zgaruvchilariga nisbatan 
qo’llaniladi, global o’zgaruvchilarga qo’llash kompilyasiya xatosiga olib 
keladi. 
Tashqi   o’zgaruv chilar.   Agar   programma   bir   nechta   moduldan
iborat   bo’lsa,   ular   qandaydir   o’zgaruvchi   orqali   o’zaro   qiymat   alma-
shishlari   mumkin   (fayllar   orasida).   Buning   uchun   o’zgaruvchi   birorta
modulda   global   tarzda   e’lon   qilinadi   va   u   boshqa   faylda   (modulda)
ko’rinishi   uchun   u   erda   extern   modifikatori   bilan   e’lon   qilinishi   kerak
bo’ladi.   extern   modifikatori   o’zgaruvchini   boshqa   faylda   e’lon
qilinganligini   bildiradi.   Tashqi   o’zgaruvchilar   ishlatilgan   prog-rammani
ko’raylik. 
//Sarlavha.h faylida 
void Bayroq_Almashsin(void); 
// modul_1.cpp faylida 
bool Bayroq; 
void Bayroq_Almashsin(void){Bayroq=!
Bayroq;} // masala.cpp faylida 
#include < iostream.h> 
#include <Sarlavha.h> 
#include <modul_1.cpp>  extern bool Bayroq; 
int main () 
{  25 
Bayroq_Almashsin(); 
 if(Bayroq) 
 cout<<”Bayroq TRUE”<<endl; 
 else cout<<”Bayroq FALSE”<<endl; 
 return 0; 
Oldin sarlavha.h faylida Bayroq_Almashsin( ) funksiya sarlav-hasi 
e’lon qilinadi, keyin modul_1.srr faylida tashqi o’zgaruvchi e’lon qilinadi 
va Bayroq_Almashsin() funksiyasining tanasi aniqla-nadi va nihoyat, 
masala.cpp faylida Bayroq o’zgaruvchisi tashqi deb e’lon qilinadi. 
St at ik  o’zgaruv chilar.  Statik o’zgaruvchilar static modifika-tori bilan
e’lon   qilinadi   va   o’z   xususiyatiga   ko’ra   global   o’zgaruvchi-larga
o’xshaydi.   Agar   bu   turdagi   o’zgaruvchi   global   bo’lsa,   uning   amal   qilish
sohasi - e’lon qilingan joydan programma matnining oxirigacha bo’ladi.
Agar statik o’zgaruvchi funksiya yoki blok ichida e’lon qilinadigan bo’lsa,
u   funksiya   yoki   blokka   birinchi   kirishda   initsializatsiya   qilinadi.
O’zgaruvchining bu qiymati funksiya keyingi chaqirilganida yoki blokka
qayta   kirishda   saqlanib   qoladi   va   bu   qiymatni   o’zgartirish   mumkin.
Statik o’zgaruvchilarni tashqi deb e’lon qilib bo’lmaydi.  26 
II-BOB: A RROW FUN CTION S ( ) →
2.1. A rrow  funct ion t ushunchasi v a sint ak sisi 
Arrow functions in JavaScript are a concise way to write functions 
using the => syntax, automatically binding this from the surrounding 
context. 
The following code defines an arrow function that takes two 
numbers and returns their sum. 
const add  = ( a ,  b ) =>  a  + 
b ; 
console.log(add( 5 ,  3 )); 
Out put
8
Sy nt ax:
const functionName = (parameters) => {  // function body  return result;};
In t he abov e sy nt ax:
• const :  declares the function as a constant 
variable. 
• funct ionName:  name of the arrow function. 
• (paramet ers):  inputs to the function. 
• =>:  arrow showing it’s an arrow function (replaces function 
keyword). 
• { ... }:  function body where code runs. 
• ret urn result ; :  explicitly returns a value. 
1. A rrow  Funct ion w it hout  Paramet ers 
An arrow function without parameters is defined using empty 
parentheses (). This type of function is useful when no input values are 
needed, such as for callbacks, timers, or simple operations.   27 
2. A rrow  Funct ion w it h Single Paramet ers 
When an arrow function has only one parameter, parentheses 
around the parameter can be omitted, making the syntax shorter and 
cleaner. This is commonly used in callbacks, array methods, or simple 
operations. 
const square  =  x  => 
x * x ; 
console.log(square( 4 ))
; 
Out put
16
3. A rrow  Funct ion w it h Mult iple Paramet ers 
Arrow functions with multiple parameters, like (param1, param2) => 
{ }, simplify writing concise function expressions in JavaScript, useful for
functions requiring more than one argument. 
const gfg  = (  x ,  y ,  z  ) => {
 console.log(  x  +  y  +  z  ) 
} 
gfg(  10 ,  20 ,  30  ); 
Out put
60 4. A rrow  Funct ion w it h Default  Paramet ers 
Arrow functions support default parameters, allowing predefined 
values if no argument is passed, making JavaScript function definitions 
more flexible and concise.  28 
const gfg  = (  x ,  y ,  z  =  30  ) => { 
 console.log(  x  +  " "  +  y  +  " "  +  z ); 
} 
gfg(  10 ,  20  ); 
Out put
10 20 30
5. Ret urn Object  Lit erals 
In JavaScript, returning object literals within functions is concise:  () 
=> ({ k ey : v alue })  returns an object { key: value }, useful for immediate 
object creation and returning. 
const makePerson  = ( firstName , 
lastName ) => ({first:  firstName , last: 
lastName }); 
console.log(makePerson( "Pankaj" , 
"Bind" )); 
Out put
{ first: 'Pankaj', last: 'Bind' }
Async Arrow Functions 
Arrow functions can be made asynchronous by adding the async 
keyword before the parameter list. This allows the function to use the 
await keyword inside its body to pause execution until a Promise is 
resolved, making asynchronous code easier to read and manage. 
const fetchData = asy nc ()=>{ const data = aw ait fetch( 'https://api.example.com/data' ); 29 
ret urn data.json();
};
In t his example:
• The async keyword marks the function as 
asynchronous. 
• await can be used inside the function to wait for Promises. 
• Returns a Promise automatically. 
• Useful for handling API calls, timers, or any asynchronous operations. 
Arrow Functions vs. Regular Functions 
Here is the detailed Comparsion between Arrow Functions and 
Regular Functions: 
Aspect A rrow  Funct ions Regular Funct ions
this Binding Lexically binds this to 
the surrounding context this is dynamically
bound depending on 
how the function is 
called
Syntax Shorter and more 
concise Requires the function 
keyword
arguments Object Does not have its own 
arguments object Has its own arguments
object
Use as Constructo r Cannot be used as a 
constructor Can be used as a 
constructor with new
Method Definition s Cannot be used as 
methods within 
objects Can be used to define
methods in objects
Return Value Implicit return for single 
expressions Must use return 
keyword 30 
2.2. Paramet rlar, ret urn v a qisqart irilgan y ozilishi. 
JavaScript   funksiya   ta'riflari   funksiya   parametrlari   uchun
kutilayotgan   tipni   belgilamaydi   va   funksiya   chaqiruvlari   siz   uzatgan
argument   qiymatlarida   hech   qanday   tip   tekshiruvini   amalga
oshirmaydi.  Aslida,  JavaScript  funksiya  chaqiruvlari hatto  uzatilayotgan
argumentlar   sonini   ham   tekshirmaydi.   Keyingi   quyi   bo'limlar   funksiya
e'lon   qilingan   parametrlardan   kamroq   argumentlar   bilan   yoki   e'lon
qilingan parametrlardan ko'proq argumentlar bilan chaqirilganda nima
sodir   bo'lishini   tasvirlaydi.   Ular,   shuningdek,   agar   funksiya   nomaqbul
argumentlar   bilan   chaqirilmasligiga   ishonch   hosil   qilishingiz   kerak
bo'lsa,   funksiya   argumentlarining   tipini   qanday   qilib   aniq
tekshirishingiz mumkinligini namoyish etadi. 
Funksiya e'lon qilingan parametrlardan kamroq argumentlar bilan 
chaqirilganda, 
qo'shimch
a parametrl
arga ularning standart qiymati o'rnatiladi
, bu
odatda  undefined  bo'ladi. Ko'pincha funksiyalarning ba'zi 
argumentlarini ixtiyoriy bo'ladigan qilib yozish foydalidir. Quyida misol 
keltirilgan: 
// `o` obyektining sanab o'tiladigan xossalari nomlarini `a` massiviga
// qo'shadi va `a`ni qaytaradi. Agar `a` tushirib qoldirilsa, yangi massiv 
yaratadi
va qaytaradi.
function  getPropertyNames ( o ,  a ) {
 if  ( a  ===  undefined )  a  = [];  // Agar `undefined` bo'lsa, yangi massivdan
foydalanadi
 for ( let  property  in  o )  a . push ( property );
 return  a ;
}
// `getPropertyNames()`ni bir yoki ikkita argument bilan chaqirish 
mumkin: let  o  = { x:  1 },  p  = { y:  2 ,  z:  3 };    // Sinov uchun ikkita obyekt
let  a  =  getPropertyNames ( o );         // a == ["x"]; `o`ning xossalarini yangi 
massivda
olish 31 
getPropertyNames ( p ,  a );              // a == ["x","y","z"]; unga `p`ning 
xossalarini
qo'shish
Ushbu funksiyaning birinchi qatorida  if  ko'rsatmasidan foydalanish 
o'rniga, siz  ||  operatoridan quyidagi idiomatik usulda foydalanishingiz 
mumkin: 
a  =  a  || [];
§4.10.2-
bo'limdan eslaydigan bo'lsak,  ||
operatori, agar birinchi
argumenti   truthy   bo'lsa,   o'sha   argumentni,   aks   holda,   ikkinchi
argumentini qaytaradi. Bu holda, agar ikkinchi argument sifatida biror
obyekt   uzatilsa,   funksiya   o'sha   obyektdan   foydalanadi.   Lekin   agar
ikkinchi   argument   tushirib   qoldirilsa   (yoki   null   yoxud   boshqa   falsy
qiymat uzatilsa), uning o'rniga yangi yaratilgan bo'sh massiv ishlatiladi. 
E'tibor   bering,   ixtiyoriy   argumentlarga   ega   funksiyalarni
loyihalashtirayotganda,   ularni  tushirib  qoldirish   imkonini  berish   uchun
ixtiyoriy parametrlarni argumentlar ro'yxatining oxiriga qo'yganingizga
ishonch   hosil   qiling.   Funksiyangizni   chaqirayotgan   dasturchi   birinchi
argumentni  tushirib  qoldirib,   ikkinchisini  uzata  olmaydi:   buning  uchun
u birinchi argument sifatida aniq   undefined   qiymatini uzatishiga to'g'ri
kelardi. 
ES6   va   undan   keyingi   versiyalarda   siz   funksiyangizning   har   bir
parametri   uchun   standart   qiymatni   to'g'ridan-to'g'ri   funksiyaning
parametrlar  ro'yxatida  ta'riflashingiz mumkin.   Buning  uchun  parametr
nomidan   keyin   tenglik   belgisi   va   o'sha   parametr   uchun   argument
taqdim etilmaganda ishlatiladigan standart qiymatni yozish kifoya: 
// `o` obyektining sanab o'tiladigan xossalari nomlarini `a` massiviga
// qo'shing va `a`ni qaytaradi. Agar `a` tushirib qoldirilsa, yangi massiv 
yaratadi
va qaytaradi.
function  getPropertyNames ( o ,  a  = []) {
 for ( let  property  in  o )  a . push ( property );
 return  a ;
} Agar parametrning standart qiymatlari konstantalar (yoki  []  va  {}  
kabi literal ifodalar) bo'lsa, funksiyalarni tahlil qilish osonroq bo'ladi. 
Lekin bu talab  32 
qilinmaydi: siz, masalan, parametrning standart qiymatini hisoblash 
uchun 
o'zgaruvchilar yoki funksiya chaqiruvlaridan foydalanishingiz mumkin. 
Qiziqarli bir 
holat shundaki, bir nechta parametrga ega funksiyalar uchun siz undan 
keyingi 
parametrlarning standart qiymatini ta'riflashda oldingi parametrning 
qiymatidan 
foydalanishingiz mumkin: 
// Bu funksiya to'rtburchakning o'lchamlarini ifodalovchi obyekt 
qaytaradi.
// Agar faqat `width` (kenglik) taqdim etilsa, uni kengligidan ikki 
baravar baland
qiladi.
const  rectangle  = ( width ,  height = width * 2 )  =>  ({ width ,  height });
rectangle ( 1 )  // => { width: 1, height: 2 }
Bu kod parametrning standart qiymatlari strelkali funksiyalar bilan 
ishlashini 
namoyish etadi. Xuddi shu narsa metodlarning qisqa yozuvi va funksiya
ta'riflarining boshqa barcha shakllari uchun ham o'rinlidir. 
ular bizga parametrlardan ixtiyoriy ravishda ko'proq argumentlar 
bilan 
chaqirilishi mumkin bo'lgan funksiyalarni yozishga yo'l qo'yadi. 
Quyida bir yoki undan ortiq sonli argumentlarni kutadigan va 
ularning eng 
kattasini qaytaradigan funksiyaga misol keltirilgan: 
function  max ( first =- Infinity , ... rest ) { 
 let  maxValue  =  first ;  // Avvaliga birinchi argumentni eng katta deb 
faraz
qilamiz
 // So'ngra qolgan argumentlar bo'ylab aylanib, kattaroqlarini qidiramiz
 for ( let  n  of  rest ) {
 if  ( n  >  maxValue ) {
 maxValue  =  n ;
 }
 }  // Eng kattasini qaytaramiz
 return  maxValue ;
}
max ( 1 ,  10 ,  100 ,  2 ,  3 ,  1000 ,  4 ,  5 ,  6 )  // => 1000 33 
let  numbers  = [ 5 ,  2 ,  10 , - 1 ,  9 ,  100 ,  1 ];
Math . min (... numbers )  // => -1
E'tibor   bering,   ...   qiymat   hosil   qilish   uchun   baholanishi   mumkin
bo'lgan   haqiqiy   ma'nodagi   operator   emas.   Buning   o'rniga,   u   massiv
literallari va funksiya chaqiruvlarida ishlatilishi mumkin bo'lgan maxsus
JavaScript sintaksisidir. 
Biz   xuddi   shu   ...   sintaksisini   funksiya   chaqiruvida   emas,   balki
funksiya ta'rifida ishlatsak, u yoyish operatoriga teskari ta'sir ko'rsatadi.
§8.3.2-bo'limda ko'rganimizdek, funksiya ta'rifida   ... 'dan foydalanish bir
nechta funksiya argumentlarini bitta massivga  34 
X ULOSA  
Hozirgi kunda dasturla
sh va web-
ilovalar yaratish jarayoni tobora
murakkablashib   bormoqda.   Bu   jarayonda   kodning   qayta   ishlatilishi,
modul   va   samarali   bo‘lishi   juda   muhimdir.   Shu   jihatdan   funk siy alar
dasturlashning   markaziy   vositalaridan   biri   hisoblanadi.   Ular   dastur
kodini   qismlarga   ajratish,   takrorlanuvchi   vazifalarni   soddalashtirish   va
tizimni samarali boshqarish imkonini beradi. JavaScript dasturlash tilida
funksiyalar   nafaqat   oddiy   amallarni   bajarish   vositasi,   balki   dasturlash
paradigmasining muhim elementi hisoblanadi. 
Ushbu   kurs   ishida   funksiyalar   ikki   turga   bo‘lingan:   oddiy
funk siy alar   (regular   funct ions)   va   arrow   funct ionlar   ( )→ .   Oddiy
funksiyalar   dastlabki   JavaScript   versiyalaridan   mavjud   bo‘lib,   ular
an’anaviy   deklaratsiya   va   chaqirish   sintaksisiga   ega.   Oddiy   funksiyalar
parametrlar   qabul   qiladi,   natija   qaytaradi   va   lokal   hamda   global
o‘zgaruvchilar   bilan   ishlash   imkonini   beradi.   Ular   kodni   modul   tarzida
tashkil   qilishda   muhim   ahamiyatga   ega   bo‘lib,   dasturchilar   tomonidan
keng   qo‘llaniladi.   Shu   bilan   birga,   oddiy   funksiyalarning   this   konteksti
murakkab   bo‘lishi   mumkin,   ayniqsa   callback   funksiyalar   yoki   event
handlerlarda. 
Arrow functionlar esa 2015-yilda ECMAScript 6 standarti bilan 
kiritilgan bo‘lib, sintaksisi qisqa va this kontekstini meros qilib oladi. Bu 
funksiyalar callback va higher-order funksiyalar bilan ishlashni 
osonlashtiradi. Arrow functionlar yordamida array metodlari (map, 
filter, reduce) bilan kod yozish samarali va ixcham bo‘ladi. Ularning 
sintaksisi qisqa va tushunarli bo‘lgani sababli, zamonaviy web-
dasturlashda keng qo‘llaniladi. 
Kurs ishining ilmiy-amaliy jihatlari quyidagilarni o‘z ichiga oladi: 
1. Funk siy alarni modul t arzda y arat ish v a qo‘llash  – bu kodni 
qayta ishlatish va murakkab tizimlarni boshqarishni osonlashtiradi.  Oddiy va arrow funksiyalar yordamida dasturiy jarayonlarni 
soddalashtirish, kodni ixcham va tushunarli qilish mumkin. 
2. Kod xav fsizligi v a samaradorligi  – funksiyalar yordamida web-
loyihalarda foydalanuvchi ma’lumotlarini qayta ishlash, inputlarni 
tekshirish va serverga so‘rov  35 
yuborish jarayonlarini xavfsiz tashkil etish mumkin. Arrow functionlar 
yordamida this kontekstini to‘g‘ri ishlatish orqali kod xatolarini 
kamaytirish mumkin. 
3. Foy dalanuv chi   t ajribasini   y axshilash   –   funksiyalar   va   arrow
functionlar   yordamida   interaktiv   va   dinamik   web-ilovalar   yaratish,
foydalanuvchi   bilan   muloqotni   optimallashtirish   mumkin.   Masalan,
forma   validatsiyasi,   dinamik   content   yaratish   va   foydalanuvchi
inputlarini qayta ishlash jarayonlari funksiyalar orqali osonlashadi. 
Kurs ishida tahlil qilingan misollar va amaliyotlar shuni ko‘rsatadiki,
oddiy   va   arrow   funksiyalarni   to‘g‘ri   qo‘llash   web-loyihalarning
samaradorligini sezilarli darajada oshiradi. Oddiy funksiyalar murakkab
hisoblash   va   parametrlarni   boshqarishda   qulay   bo‘lsa,   arrow
functionlar   qisqa   sintaksisi   va   this   konteksti   bilan   ishlashda   afzallik
beradi.   Shu   bilan   birga,   arrow   functionlar   array   metodlari   va   callback
funksiyalar   bilan   birgalikda   ishlatilganda   kodni   ixcham   va   tushunarli
qiladi. 
Kurs ishida aniqlangan asosiy natijalar quyidagilar: 
• Oddiy funksiyalar va arrow functionlarning sintaksisi, parametrlar 
bilan ishlashi va natija qaytarish mexanizmi batafsil tahlil qilindi. 
• Funksiyalar yordamida kodni modul tarzda tashkil qilish va qayta 
ishlatishning amaliy ahamiyati ko‘rsatildi. 
• Arrow functionlarning this konteksti bilan ishlash xususiyati va 
oddiy funksiyalardan farqlari misollar bilan tushuntirildi. 
• Array metodlari (map, filter, reduce) bilan arrow function qo‘llash 
imkoniyatlari amaliy misollar orqali ko‘rsatildi. 
• Funksiyalarni web-loyihalarda samarali va xavfsiz qo‘llash tavsiyalari
ishlab chiqildi. 
Shuningdek,   kurs   ishida   funksiyalarning   dasturlashdagi   ilmiy
asoslari   ham   yoritildi.   Funksiyalar   algoritmik   fikrlashni   rivojlantirishga
yordam   beradi,   murakkab   tizimlarni   modul   tarzda   loyihalash   imkonini
beradi   va   dasturchilarga   samarali   kod   yozish   ko‘nikmalarini   beradi. Arrow functionlar esa sintaksis soddaligi va this kontekstini meros qilib
olish xususiyati bilan zamonaviy dasturlashda qulaylik yaratadi.  36 
FOY DA LA N ILGA N  ADA BIY OTLA R 
1.  Flanagan, D. JavaScript: The Definitive Guide.  7th Edition. 
O’Reilly 
Media, 2020. 
2.  Duck et t , J . JavaScript and JQuery: Interactive Front-End Web 
Development.  Wiley, 2014. 
3.  Duck et t , J . HTML and CSS: Design and Build Websites.  2nd 
Edition. 
Wiley, 2014. 
4.  Mozilla Dev eloper N et w ork  (MDN ). Functions – JavaScript.
5.  Mozilla Dev eloper N et w ork  (MDN ). Arrow Functions – 
JavaScript.
6.  Holzner, S. JavaScript: The Complete Reference.  McGraw-Hill 
Education, 2018. 
7.  Hubbard, A . Web Security for Developers.  Packt Publishing, 
2021. 
8.  St ut t ard, D., Pint o, M. The Web Application Hacker's 
Handbook.
2nd Edition. Wiley, 2011. 
9.  Feldman, L., Freeman, J . Learning React and Node.js Form 
Validation.  O’Reilly, 2020. 
10.  Keit h, J . DOM Scripting: Web Design with JavaScript and the 
Document Object Model.  2nd Edition. Friends of ED, 2010. 
11.  Ganss, S. Client-Side Form Validation Best Practices.  Smashing 
Magazine, 2020. 
12.  Redgat e, N. JavaScript Best Practices for Modern Web 
Development.
InfoQ, 2019. 
13.  Crock ford, D. JavaScript: The Good Parts.  O’Reilly Media, 2008.  14.  Flanagan, D. ECMAScript 6: New Features.  O’Reilly Media, 
2016. 
15.  OWA SP. OWASP Top 10: Web Application Security Risks.  2021.

MUNDARIJA

KIRISH

I-BOB: ODDIY FUNKSIYALAR (REGULAR FUNCTIONS)

1.1. Funksiya yaratish va chaqirish

1.2. Parametrlar va return qiymati

1.3. Lokal va global o‘zgaruvchilar, funksiyalarni qayta ishlatish

II-BOB: ARROW FUNCTIONS (→)

2.1. Arrow function tushunchasi va sintaksisi

2.2. Parametrlar, return va qisqartirilgan yozilish

XULOSA

FOYDALANILGAN ADABIYOTLAR