Funksiyalar qiymatlar sifatida
Funksiyalarning eng muhim xususiyatlari — bu ularni ta'riflash va chaqirish mumkinligidir. Funksiyani ta'riflash va chaqirish JavaScript hamda boshqa ko'pgina dasturlash tillarining sintaktik xususiyatlaridir. Biroq JavaScript'da funksiyalar nafaqat sintaksis, balki ayni paytda qiymatlar hamdir. Bu shuni anglatadiki, ularni o'zgaruvchilarga tayinlash, obyektlarning xossalarida yoki massivlarning elementlarida saqlash, funksiyalarga argument sifatida uzatish va hokazolar mumkin.1
Funksiyalar qanday qilib JavaScript sintaksisi bo'lish bilan birga JavaScript ma'lumoti ham bo'lishi mumkinligini tushunish uchun ushbu funksiya ta'rifini ko'rib chiqamiz:
Bu ta'rif yangi funksiya obyektini yaratadi va uni square
o'zgaruvchisiga tayinlaydi. Funksiyaning nomi aslida unchalik muhim emas; u shunchaki funksiya obyektiga ishora qiluvchi o'zgaruvchining nomidir. Funksiyani boshqa o'zgaruvchiga tayinlash mumkin va u baribir o'sha tarzda ishlayveradi:
Funksiyalarni o'zgaruvchilarga emas, balki obyekt xossalariga ham tayinlash mumkin. Biz allaqachon muhokama qilganimizdek, bunday qilganimizda biz funksiyalarni "metodlar" deb ataymiz:
Funksiyalar, masalan, massiv elementlariga tayinlanganda, umuman nom talab qilmasligi ham mumkin:
Bu oxirgi misolning sintaksisi g'alati ko'rinishi mumkin, lekin u baribir to'g'ri funksiya chaqiruvi ifodasidir!
Funksiyalarga qiymat sifatida qarash qanchalik foydali ekanligiga misol sifatida Array.sort()
metodini ko'rib chiqaylik. Bu metod massiv elementlarini saralaydi. Saralash uchun juda ko'p mumkin bo'lgan tartiblar (sonli tartib, alifbo tartibi, sana tartibi, o'sish, kamayish va hokazo) mavjud bo'lgani uchun, sort()
metodi saralashni qanday amalga oshirishni aytish uchun ixtiyoriy ravishda argument sifatida funksiya qabul qiladi. Bu funksiyaning vazifasi oddiy: unga uzatilgan har qanday ikki qiymat uchun u saralangan massivda qaysi element birinchi kelishini belgilaydigan qiymatni qaytaradi. Bu funksiya argumenti Array.sort()
'ni mutlaqo universal va cheksiz moslashuvchan qiladi; u har qanday tipdagi ma'lumotni tasavvur qilish mumkin bo'lgan har qanday tartibda saralay oladi. Misollar §7.8.6-bo'limda ko'rsatilgan.
8-1-misol funksiyalar qiymatlar sifatida ishlatilganda qanday ishlarni qilish mumkinligini ifoda etadi. Bu misol biroz murakkab bo'lishi mumkin, lekin izohlar nima bo'layotganini tushuntiradi.
8-1-misol. Funksiyalardan ma'lumot sifatida foydalanish
Shaxsiy funksiya xossalarini yaratish
JavaScript'da funksiyalar primitiv qiymatlar emas, balki obyektning ixtisoslashgan bir turidir. Bu shuni anglatadiki, funksiyalar xossalarga ega bo'lishi mumkin. Biror funksiya chaqiruvdan chaqiruvga o'z qiymatini saqlab qoladigan "statik" o'zgaruvchiga ehtiyoj sezganda, ko'pincha funksiyaning o'zining xossasidan foydalanish qulay bo'ladi.
Tasavvur qiling, siz har safar chaqirilganda unikal butun son qaytaradigan funksiya yozmoqchisiz. Funksiya hech qachon bir xil qiymatni ikki marta qaytarmasligi kerak. Buni boshqarish uchun funksiya o'zi allaqachon qaytargan qiymatlarni kuzatib borishi kerak va bu ma'lumot funksiya chaqiruvlari oralig'ida saqlanib qolishi lozim. Siz bu ma'lumotni global o'zgaruvchida saqlashingiz mumkin edi, lekin bunga hojat yo'q, chunki bu ma'lumot faqat funksiyaning o'zi tomonidan ishlatiladi. Ma'lumotni Function
obyektining xossasida saqlash ancha yaxshiroqdir.
Quyida har safar chaqirilganda turli xil butun son qaytaradigan misol keltirilgan:
Yana bir misol sifatida, avval hisoblangan natijalarni keshlash uchun o'zining xossalaridan (o'ziga massiv sifatida qarab) foydalanadigan quyidagi factorial()
funksiyasini ko'rib chiqamiz:
-
Agar siz funksiyalar dasturning bir qismi bo'lgan, lekin dastur tomonidan boshqarilishi mumkin bo'lmagan statikroq tillar bilan tanish bo'lmasangiz, bu unchalik qiziqarli nuqta bo'lib tuyulmasligi mumkin. ↩