JavaScript'te İsimli Fonksiyon İfadeleri
Diyelim ki şöyle bir fonksiyon ifademiz var:
let test = function() {
console.log('!');
};
test(); // '!' yazdıracak
Fonksiyonumuza func adını verelim:
let test = function func() {
console.log('!');
};
test();
Zaten bildiğiniz gibi, bu isimle fonksiyona erişilemez:
let test = function func() {
console.log('!');
};
test(); // '!' yazdıracak
func(); // hata verecek
Erişilemeyecekse fonksiyona neden isim verelim? Çünkü bu isim fonksiyonun dışından erişilemez olacak, ancak fonksiyonun içinden erişilebilir olacak.
Kontrol edelim:
let test = function func() {
console.log(func); // fonksiyon kendi kaynak kodunu yazdıracak
};
test(); // fonksiyonu çağırıyoruz
Fonksiyonumuzu kendi içinden çağıralım:
let test = function func() {
console.log('!'); // '!' yazdırıyoruz
func(); // kendimizi çağırıyoruz
};
test();
Bu kodu çalıştırırsanız, konsola sonsuz sayıda çıktı yazdırılacaktır.
Aslında fonksiyonumuz kendi içinden sadece
func olarak değil, aynı zamanda
test olarak da çağrılabilir:
let test = function func() {
console.log('!');
test(); // kendimizi çağırıyoruz
};
test();
Peki fark nedir? Fark şu ki, test ismi
sadece bir değişkendir. Script çalışırken fonksiyonumuz
başka bir değişkene yazılabilir veya parametre olarak
iletilebilir - bu durumda test değişkeni ile
fonksiyon arasındaki bağlantı kopabilir.
func ismi ise, fonksiyonun kendi içinden
kendisine erişebilmesi için özellikle fonksiyona
sıkı bir şekilde bağlanmıştır.
Fonksiyon ismi olan bu tür Function Expression'lara isimli fonksiyon ifadeleri denir.