JavaScript-da Nomlangan Funksional Ifodalar

Faraz qilaylik, bizda quyidagi funksional ifoda mavjud:

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

test(); // '!' chiqadi

Keling, funksiyamizga func nomini beraylik:

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

test();

Bilganingizdek, ushbu nom orqali funksiyani chaqirib bo'lmaydi:

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

test(); // '!' chiqadi
func(); // xatolik beradi

U holda, funksiyaga nom berish nima uchun kerak, agar u ishlatilmaydigan bo'lsa? Gap shundaki, bu nom funksiyadan tashqarida ishlatilmaydi, lekin funksiya ichida ishlatilishi mumkin.

Keling, tekshiramiz:

javascriptlet test = function func() {
  console.log(func); // funksiya o'zining boshlang'ich kodini chiqaradi
};

test(); // funksiyani chaqiramiz

Keling, funksiyani o'zining ichida chaqiramiz:

javascriptlet test = function func() {
  console.log('!'); // '!' chiqaramiz
  func(); // o'zimizni o'zimiz chaqiramiz
};

test();

Agar ushbu kod ishga tushirilsa, konsolga cheksiz sonli chiqishlar chiqadi.

Aslida, bizning funksiyamiz nafaqat func sifatida, balki test sifatida ham chaqirilishi mumkin:

javascriptlet test = function func() {
  console.log('!');
  test(); // o'zimizni o'zimiz chaqiramiz
};

test();

Farqi nima? Farq shundaki, test nomi shunchaki o'zgaruvchidir. Skript ishlashi jarayonida bizning funksiyamiz boshqa o'zgaruvchiga yozilishi yoki parametr sifatida uzatilishi mumkin - bu holda test o'zgaruvchisi va funksiya o'rtasidagi bog'liqlik yo'qolishi mumkin.

func nomi esa funksiyaga qat'iy bog'langan bo'lib, aynan shu funksiyani o'z ichida chaqirish imkoniyati uchun mo'ljallangan.

Funksiya nomi bilan ifodalangan shunday Function Expression'lar nomlangan funksional ifodalar deb ataladi.