Higher order function vs Callback function, Closure
Muhammadrasul NurmukhamedovJavaScript dasturlash tilida "Higher order function" va "callback function" deb nomlangan funksiyalar keng tarqalgan. Bu funksiyalar JavaScript tilining muhim qismlaridan biridir va boshqa funksiyalarni yaratish, ularga oid ma'lumotlarni saqlash va ularga murojat qilish imkoniyatlarini berishda yordam beradi. Bu postda biz "Higher order function" va "callback function" nima?ularning bir-biridan farqlarini ko'rib chiqamiz.
"Higher order function" yoki "yuqori darajali funksiya" - bu funksiya, boshqa funksiyani argument sifatida qabul qiladigan yoki funksiyani qaytaradigan funksiyadir. Bunda, birinchi first class funksiyalar (first klass bu o'zimiz bilgan oddiy funksiyalar) ichida, o'zgaruvchilar o'rniga argument sifatida boshqa funksiya qabul qilinadi. "Higher order function" - funksiyalarni yaratish va ularga ma'lumotlarni saqlashda va ularga murojat qilishda keng tarqalgan. "Higher order function" bu bir qancha funksiyalar kombinatisyalari orqali yaratilishi mumkin.
Misol uchun:

Ushbu namunada multiplyBy(), boshqa funksiya qaytaradigan Higher order funksiya hisoblanadi. Qaytariladigan funksiya x deb nomlanuvchi o'zgaruvchini qabul qilib, multiplyBy() ga berilgan son bilan ko'paytiradi.
multiplyBy() funksiyasi yagona argument qabul qiladi va num ni o'z ichiga oladi. Shundan so'ng, yangi funksiya qaytaradi, bu funksiya berilgan sonni qabul qilib, uni num bilan ko'paytiradi.
Keyinchalik, triple deb ataladigan o'zgaruvchini yaratamiz va 3 argumenti bilan multiplyBy() ni chaqirish natijasini unga parametr qilib berib yuboramuz. Bu degani, triple hozir 3 soni bilan ko'paytiruvchi funksiya hisoblanadi. Endi triple ni chaqirib uning parametrga qanday son berishimizda qat'iy nazar paramterga berilgan sonni 3 ga ko'paytirib qaytaradi.
multiplyBy() ni 5 argumenti bilan chaqirib, natijani ko'rsatamiz. Natija 15 bo'ladi.
Hulosa qilib aytadigan bo'lsam HOF orqali biz endi istaganizcha funksiyalar yasab olsak bo'ladi.
Closure: Bu bizga innerFunction outerFunctiondagi parametrlar va o'zgaruvchilarni olib ishlata olishidir. Misol uchun multiplyBy ichida return bo'layotgan funksiya muliplyBy paramterdagi num ni ishlata olmoqda. Shu holat closure deyiladi.

"Callback function" esa, boshqa funksiyani argumenti sifatida qabul qilinadi. "Callback function" funksiyalarni bir-biriga bog'liq holatda ishlashda juda foydali bo'ladi. Misol uchun, biror amalni bajarishni umumiy funksiyaga berish kerak bo'lsa, shu funksiyani argument sifatida olib bajarishga imkon beradigan "callback function" qo'llaniladi.
"Callback function" funksiyasi, asosiy funksiyaga argument sifatida uzatiladi va shu funksiyani chaqiradi. "Callback function" funksiyasi boshqa funksiyalarni chaqirib, ularga murojat qilish uchun ham foydali bo'ladi.

startWork() deb nomlangan bir funkisya bor, bu funkisya ikkita argument qabul qiladi: num o'zgaruvchisi faqat matn yoki son ko'rsatish uchun ishlatiladi va callback (istalgan nom bersangiz bo'ladi) funkisya ko'rinishidagi argument qabul qiladi.
startWork() funkisya boshqa funkisyalarni argument sifatida olishiga qulaylik beradi va greeting() deb nomlangan bir funkisya chaqirilganda startWork() funksiyasi greeting() funksiyaning chaqirilishi bilan bitta natija qaytaradi.
Keyinchalik, greeting funksiyasi ichida Salom! matni log qilinadi.

Ushbu misolda esa myFunction nomli funksiya setTimeoutga callback funksiya sifatida yuborilmoqda va qachonki setTimeoutga berilgan 5000 millisekunda yoki 5 sekund tugaganidan so'ng o'z ishini boshlaydi.
Hulosa: "Higher order function" - funksiyani argument sifatida qabul qiladi, "callback function" esa boshqa funksiyani argumenti sifatida yuboriladi va shu funksiyani chaqiradi. "Higher order function" funksiyalarni saqlab turadi, "callback function" esa ularning ishini bajaradi.
Post ma'qul keldimi ulashing, xatolar qilgan bo'lsa commentda eslating :)
Cheers!!😄😄😄