JavaScript-də Funksiya İfadələrinin Nüansları
Funksiya İfadəsinin adı boş yerə verilməyib. Bu, həqiqətən də deməkdir ki, belə funksiyalar hər hansı bir ifadənin hissəsidir.
Məsələn, biz hansısa bir sətri və adsız bir funksiyanı toplaya bilərik:
let str = 'str' + function() {return 3;};
console.log(str); // çıxaracaq: 'strfunction() {return 3;}'
Niyə biz 3 rəqəmi əvəzinə belə qəribə nəticə görürük?
Çünki ikinci toplanan - bu funksiyanın işləmə nəticəsi deyil,
onun ilkin kodudur (axı biz bu funksiyanı çağırmadıq, sadəcə
yazdıq).
Yəni funksiya ifadəsi adlandırılması o deməkdir ki, belə bir funksiya hər hansı bir ifadədə iştirak edir.
Dəyişənə mənimsətmə də ifadədir:
let func = function() {
console.log('!');
};
Həmçinin, məsələn, funksiyanı
console.log-a parametr kimi ötürmək olar
və o, onun ilkin kodunu konsola çıxaracaq - bu da
ifadə sayılacaq:
console.log(function() {return 3;});
Bu niyə vacibdir: çünki Funksiya Deklarasiyası (Function Declaration) ilə Funksiya İfadəsinin (Function Expression) fərqi heç də o deyil ki, birinci funksiya adla yaradılır, ikincisinin isə əvvəldən adı yoxdur. Bu, belə deyil.
Nümunə. Budur bizim adsız funksiyamız, lakin eyni zamanda heç bir ifadədə iştirak etmir (yəni onunla heç bir hərəkət edilmir, sadə dillə desək):
/*
Bu funksiya Funksiya Deklarasiyası olacaq,
lakin sintaktik xəta ilə:
*/
function() {
console.log('!');
}
Belə bir kod ümumiyyətlə xəta verəcək! Niyə: belə ki, funksiya heç bir ifadədə iştirak etmir, brauzer onu Funksiya Deklarasiyası hesab edir, lakin onun adını tapmır və xəta verir.
Xətanın aradan qalxması üçün funksiyanı hər hansı bir ifadənin
hissəsi etmək lazımdır. Məsələn,
onun qarşısında + əməliyyatı yazaq:
+function() { // belə bir kod düzgündür
console.log('!');
};
Bu necə işləyir: + əməliyyatı özü
heç nə etmir, bu 3 əvəzinə +3 yazmaq kimidir - icazə verilir,
lakin heç nəyi dəyişmir.
Lakin funksiya ilə əlaqədar halda - dəyişir. İndi bizim funksiyamız artıq sadəcə yazılmır, ifadədə iştirak edir. Ona görə də indi xəta olmayacaq. Funksiyanın icra nəticəsi də olmayacaq, axı biz onu sadəcə yazdıq, lakin çağırmadıq.
+ əvəzinə istənilən şeyi yazmaq olar.
Məsələn:
-function() { // belə bir kod düzgündür
console.log('!');
};
!function() { // belə bir kod düzgündür
console.log('!');
};
Həmçinin funksiyanı dəyirmi mötərizələrə də almaq olar, bu halda o da funksiya ifadəsinə çevriləcək:
(function() { // belə bir kod düzgündür
console.log('!');
});
Təqdim olunmuş funksiyanın Funksiya Deklarasiyası və ya Funksiya İfadəsi olduğunu müəyyən edin:
function func() {
console.log('!');
}
Təqdim olunmuş funksiyanın Funksiya Deklarasiyası və ya Funksiya İfadəsi olduğunu müəyyən edin:
let func = function() {
console.log('!');
}
Təqdim olunmuş funksiyanın Funksiya Deklarasiyası və ya Funksiya İfadəsi olduğunu müəyyən edin:
+function() {
console.log('!');
}
Təqdim olunmuş funksiyanın Funksiya Deklarasiyası və ya Funksiya İfadəsi olduğunu müəyyən edin:
!function func() {
console.log('!');
}
Təqdim olunmuş funksiyanın Funksiya Deklarasiyası və ya Funksiya İfadəsi olduğunu müəyyən edin:
-function func() {
console.log('!');
}
Təqdim olunmuş funksiyanın Funksiya Deklarasiyası və ya Funksiya İfadəsi olduğunu müəyyən edin:
1 + function func() {
console.log('!');
}
Təqdim olunmuş funksiyanın Funksiya Deklarasiyası və ya Funksiya İfadəsi olduğunu müəyyən edin:
(function func() {
console.log('!');
})
Təqdim olunmuş funksiyanın Funksiya Deklarasiyası və ya Funksiya İfadəsi olduğunu müəyyən edin:
console.log(
function() {
console.log('!');
}
);