JavaScript-da Funksiya Ifodalari Nuanslari
Funksiya Ifodasi (Function Expression) nomi bejiz berilmagan. Bu haqiqatan ham shuni anglatadiki, bunday funksiyalar qandaydir ifodaning bir qismidir.
Misol uchun, biz qandaydir satrni va nomsiz funksiyani qo'shishimiz mumkin:
let str = 'str' + function() {return 3;};
console.log(str); // 'strfunction() {return 3;}' ni chiqaradi
Nega biz 3 sonini emas, balki bunday g'alati natijani ko'ramiz? Chunki ikkinchi qo'shiluvchi - bu funksiyaning ishlash natijasi emas, balki uning asl kodi (axir biz bu funksiyani chaqirmadik, shunchaki yozdik).
Ya'ni funksional ifoda nomi shuni bildiradiki, bunday funksiya qandaydir ifodada qatnashadi.
O'zgaruvchiga tayinlash ham ifodadir:
let func = function() {
console.log('!');
};
Shuningdek, masalan, funksiyani console.log ga parametr sifatida o'tkazish mumkin va u uning asl kodini konsolga chiqaradi - bu ham ifoda hisoblanadi:
console.log(function() {return 3;});
Bu nima uchun muhim: chunki Funksiya Deklaratsiyasi (Function Declaration) va Funksiya Ifodasi (Function Expression) o'rtasidagi farq umuman birinchi funksiya nom bilan yaratiladi, ikkinchisi esa dastlab nomga ega emas, deganida emas. Bu noto'g'ri.
Misol. Mana bizda nomi yo'q funksiya, lekin hech qanday ifodada qatnashmaydi (ya'ni oddiy qilib aytganda, uning bilan hech qanday harakat amalga oshirilmaydi):
/*
Ushbu funksiya Funksiya Deklaratsiyasi bo'ladi,
lekin sintaktik xato bilan:
*/
function() {
console.log('!');
}
Bunday kod umuman xatolik beradi! Nima uchun: chunki funksiya hech qanday ifodada qatnashmaganligi sababli, brauzer uni Funksiya Deklaratsiyasi deb hisoblaydi, lekin uning nomini topolmaydi va xatolik chiqaradi.
Xatolik yo'qolishi uchun, funksiyani qandaydir ifodaning bir qismiga aylantirish kerak. Masalan, uning oldiga + operatsiyasini yozamiz:
+function() { // bunday kod to'g'ri
console.log('!');
};
Bu qanday ishlaydi: + operatsiyasi o'zi hech narsa qilmaydi, bu 3 soni o'rniga +3 sonini yozgandek - ruxsat etilgan, lekin hech narsani o'zgartirmaydi.
Lekin funksiya bilan bog'liq holda - o'zgartiradi. Endi bizning funksiyamiz shunchaki yozilgan emas, balki ifodada qatnashmoqda. Shuning uchun endi xatolik bo'lmaydi. Funksiyani bajarish natijasi ham bo'lmaydi, chunki biz uni shunchaki yozdik, lekin chaqirmadik.
+ o'rniga hohlagan narsangizni yozishingiz mumkin. Masalan:
-function() { // bunday kod to'g'ri
console.log('!');
};
!function() { // bunday kod to'g'ri
console.log('!');
};
Shuningdek, funksiyani oddiy qavs ichiga olish mumkin, bu holda u ham funksional ifodaga aylanadi:
(function() { // bunday kod to'g'ri
console.log('!');
});
Taqdim etilgan funksiya Funksiya Deklaratsiyasi yoki Funksiya Ifodasi ekanligini aniqlang:
function func() {
console.log('!');
}
Taqdim etilgan funksiya Funksiya Deklaratsiyasi yoki Funksiya Ifodasi ekanligini aniqlang:
let func = function() {
console.log('!');
}
Taqdim etilgan funksiya Funksiya Deklaratsiyasi yoki Funksiya Ifodasi ekanligini aniqlang:
+function() {
console.log('!');
}
Taqdim etilgan funksiya Funksiya Deklaratsiyasi yoki Funksiya Ifodasi ekanligini aniqlang:
!function func() {
console.log('!');
}
Taqdim etilgan funksiya Funksiya Deklaratsiyasi yoki Funksiya Ifodasi ekanligini aniqlang:
-function func() {
console.log('!');
}
Taqdim etilgan funksiya Funksiya Deklaratsiyasi yoki Funksiya Ifodasi ekanligini aniqlang:
1 + function func() {
console.log('!');
}
Taqdim etilgan funksiya Funksiya Deklaratsiyasi yoki Funksiya Ifodasi ekanligini aniqlang:
(function func() {
console.log('!');
})
Taqdim etilgan funksiya Funksiya Deklaratsiyasi yoki Funksiya Ifodasi ekanligini aniqlang:
console.log(
function() {
console.log('!');
}
);