JavaScript-те атаулы функциялық өрнектер

Бізде мынадай функциялық өрнек болсын:

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

test(); // шығарады '!'

Біздің функциямызға func атауын берейік:

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

test();

Сіз бұл атау арқылы функцияға қол жеткізе алмайтыныңызды білесіз:

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

test(); // шығарады '!'
func(); // қате береді

Функцияға ол қолжетімді болмаса да, неге атау беру керек? Мәселе мынада, бұл атау функцияның сыртынан қолжетімді болмайды, бірақ сол функцияның ішінде қолжетімді болады.

Тексерейік:

javascriptlet test = function func() {
  console.log(func); // функция өз бастапқы кодін шығарады
};

test(); // функцияны шақырамыз

Функцияны оның ішінде-ақ шақырайық:

javascriptlet test = function func() {
  console.log('!'); // '!' шығарамыз
  func(); // өздігінен шақырамыз
};

test();

Егер бұл кодты іске қоссақ, онда консольге шексіз рет жазу шығады.

Шын мәнінде, біздің функция оның ішінде тек func ретінде ғана емес, сонымен қатар test ретінде де шақырылуы мүмкін:

javascriptlet test = function func() {
  console.log('!');
  test(); // өздігінен шақырамыз
};

test();

Айырмашылық неде? Айырмашылық мынада, test атауы - бұл жай айнымалы. Скрипт жұмыс істеп тұрған кезде біздің функция басқа айнымалыға жазылуы мүмкін немесе параметр ретінде берілуі мүмкін - бұл жағдайда test айнымалысы мен функция арасындағы байланыс үзілуі мүмкін.

Ал func атауы функцияға функцияның ішінде-ақ оған қол жеткізуге болатындай етіп қатты байланысқан.

Функция атауы бар мұндай Function Expression өрнектері атаулы функциялық өрнектер деп аталады.