JavaScript'te Fonksiyon İfadelerinin Nüansları
Fonksiyon İfadesi (Function Expression) adı boşuna verilmemiştir. Gerçekten de bu, bu tür fonksiyonların herhangi bir ifadenin parçası olduğu anlamına gelir.
Örneğin, bir string ve isimsiz bir fonksiyonu toplayabiliriz:
let str = 'str' + function() {return 3;};
console.log(str); // 'strfunction() {return 3;}' yazacaktır
Neden 3 sayısını değil de bu tuhaf sonucu görüyoruz? Çünkü ikinci toplanan, fonksiyonun çalışma sonucu değil, onun kaynak kodudur (sonuçta bu fonksiyonu çağırmadık, sadece yazdık).
Yani fonksiyon ifadesi adı, böyle bir fonksiyonun herhangi bir ifadede yer aldığını belirtir.
Bir değişkene atama da bir ifadedir:
let func = function() {
console.log('!');
};
Örneğin, bir fonksiyonu console.log parametresi olarak da iletebiliriz ve konsola kaynak kodunu yazdıracaktır - bu da bir ifade sayılacaktır:
console.log(function() {return 3;});
Bu neden önemli: Çünkü Fonksiyon Bildirimi (Function Declaration) ve Fonksiyon İfadesi (Function Expression) arasındaki fark, kesinlikle birincisinin bir isimle oluşturulması, ikincisinin ise başlangıçta bir isme sahip olmaması değildir. Durum bu değil.
Örnek. İşte isimsiz bir fonksiyonumuz var ama aynı zamanda herhangi bir ifadede yer almıyor (yani basitçe söylemek gerekirse, onunla herhangi bir işlem yapılmıyor):
/*
Bu fonksiyon bir Fonksiyon Bildirimi olacaktır,
ancak sentaks hatası ile:
*/
function() {
console.log('!');
}
Böyle bir kod hata verecektir! Neden: Fonksiyon herhangi bir ifadede yer almadığı için, tarayıcı onu bir Fonksiyon Bildirimi olarak kabul eder, ancak ismini bulamaz ve hata verir.
Hatadan kurtulmak için, fonksiyonu herhangi bir ifadenin parçası haline getirmemiz gerekir. Örneğin, önüne bir + işlemi yazalım:
+function() { // böyle bir kod doğrudur
console.log('!');
};
Bu nasıl çalışıyor: + işleminin kendi başına bir etkisi yoktur, bu 3 sayısı yerine +3 yazmak gibidir - kabul edilebilir, ancak hiçbir şeyi değiştirmez.
Ancak fonksiyon söz konusu olduğunda - değiştirir. Artık fonksiyonumuz sadece yazılmış değil, bir ifadede yer alıyor. Bu nedenle artık hata olmayacaktır. Fonksiyonun çalıştırılma sonucu da olmayacaktır, çünkü onu sadece yazdık, çağırmadık.
+ yerine herhangi bir şey yazılabilir.
Örneğin:
-function() { // böyle bir kod doğrudur
console.log('!');
};
!function() { // böyle bir kod doğrudur
console.log('!');
};
Ayrıca fonksiyonumuzu yuvarlak parantezler içine alabiliriz, bu durumda o da bir fonksiyon ifadesi haline gelecektir:
(function() { // böyle bir kod doğrudur
console.log('!');
});
Sunulan fonksiyonun Fonksiyon Bildirimi mi yoksa Fonksiyon İfadesi mi olduğunu belirleyin:
function func() {
console.log('!');
}
Sunulan fonksiyonun Fonksiyon Bildirimi mi yoksa Fonksiyon İfadesi mi olduğunu belirleyin:
let func = function() {
console.log('!');
}
Sunulan fonksiyonun Fonksiyon Bildirimi mi yoksa Fonksiyon İfadesi mi olduğunu belirleyin:
+function() {
console.log('!');
}
Sunulan fonksiyonun Fonksiyon Bildirimi mi yoksa Fonksiyon İfadesi mi olduğunu belirleyin:
!function func() {
console.log('!');
}
Sunulan fonksiyonun Fonksiyon Bildirimi mi yoksa Fonksiyon İfadesi mi olduğunu belirleyin:
-function func() {
console.log('!');
}
Sunulan fonksiyonun Fonksiyon Bildirimi mi yoksa Fonksiyon İfadesi mi olduğunu belirleyin:
1 + function func() {
console.log('!');
}
Sunulan fonksiyonun Fonksiyon Bildirimi mi yoksa Fonksiyon İfadesi mi olduğunu belirleyin:
(function func() {
console.log('!');
})
Sunulan fonksiyonun Fonksiyon Bildirimi mi yoksa Fonksiyon İfadesi mi olduğunu belirleyin:
console.log(
function() {
console.log('!');
}
);