JavaScript-də Adlandırılmış Funksiya İfadələri

Tutaq ki, bizim belə bir funksiya ifadəsi var:

javascriptlet test = function() {
  console.log('!');
};

test(); // '!' çap edəcək

Gəlin funksiyamıza func adı verək:

javascriptlet test = function func() {
  console.log('!');
};

test();

Artıq bildiyiniz kimi, bu adla funksiyaya müraciət etmək olmaz:

javascriptlet test = function func() {
  console.log('!');
};

test(); // '!' çap edəcək
func(); // xəta verəcək

Əlçatan olmayacaqsa, funksiyaya niyə ad vermək lazımdır? Məsələ ondadır ki, bu ad funksiyanın xaricində əlçatan olmayacaq, lakin funksiyanın daxilində əlçatan olacaq.

Gəlin yoxlayaq:

javascriptlet test = function func() {
  console.log(func); // funksiya öz mənbə kodunu çap edəcək
};

test(); // funksiyanı çağırırıq

Gəlin funksiyamızı onun daxilində özü çağıraq:

javascriptlet test = function func() {
  console.log('!'); // '!' çap edirik
  func(); // özümüzü çağırırıq
};

test();

Əgər bu kodu işə salsaq, konsola qeyri-məhdud sayda çap olunacaq.

Əslində, bizim funksiyamız özü daxilində təkcə func kimi deyil, həm də test kimi çağırıla bilər:

javascriptlet test = function func() {
  console.log('!');
  test(); // özümüzü çağırırıq
};

test();

Fərq nədədir? Fərq ondadır ki, test adı sadəcə dəyişəndir. Skriptin işləməsi prosesində bizim funksiyamız başqa dəyişənə yazıla bilər və ya parametr kimi ötürülə bilər - bu zaman test dəyişəni ilə funksiya arasındakı əlaqə itirilə bilər.

func adı isə xüsusi olaraq funksiyanın öz daxilində özünə müraciət edə bilməsi üçün sərt şəkildə funksiyaya bağlıdır.

Funksiya adı olan belə Funksiya İfadələri adlandırılmış funksiya ifadələri adlanır.