JavaScript'te İsimli Fonksiyon İfadeleri
Diyelim ki şöyle bir fonksiyon ifademiz var:
javascriptlet test = function() {
console.log('!');
};
test(); // '!' yazdıracak
Fonksiyonumuza func adını verelim:
javascriptlet test = function func() {
console.log('!');
};
test();
Zaten bildiğiniz gibi, bu isimle fonksiyona erişilemez:
javascriptlet 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:
javascriptlet test = function func() {
console.log(func); // fonksiyon kendi kaynak kodunu yazdıracak
};
test(); // fonksiyonu çağırıyoruz
Fonksiyonumuzu kendi içinden çağıralım:
javascriptlet 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:
javascriptlet 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.