JavaScript-те атаулы функциялық өрнектер
Бізде мынадай функциялық өрнек болсын:
let test = function() {
console.log('!');
};
test(); // шығарады '!'
Біздің функциямызға func атауын берейік:
let test = function func() {
console.log('!');
};
test();
Сіз бұл атау арқылы функцияға қол жеткізе алмайтыныңызды білесіз:
let test = function func() {
console.log('!');
};
test(); // шығарады '!'
func(); // қате береді
Функцияға ол қолжетімді болмаса да, неге атау беру керек? Мәселе мынада, бұл атау функцияның сыртынан қолжетімді болмайды, бірақ сол функцияның ішінде қолжетімді болады.
Тексерейік:
let test = function func() {
console.log(func); // функция өз бастапқы кодін шығарады
};
test(); // функцияны шақырамыз
Функцияны оның ішінде-ақ шақырайық:
let test = function func() {
console.log('!'); // '!' шығарамыз
func(); // өздігінен шақырамыз
};
test();
Егер бұл кодты іске қоссақ, онда консольге шексіз рет жазу шығады.
Шын мәнінде, біздің функция оның ішінде тек func ретінде ғана емес, сонымен қатар test ретінде де шақырылуы мүмкін:
let test = function func() {
console.log('!');
test(); // өздігінен шақырамыз
};
test();
Айырмашылық неде? Айырмашылық мынада, test атауы - бұл жай айнымалы. Скрипт жұмыс істеп тұрған кезде біздің функция басқа айнымалыға жазылуы мүмкін немесе параметр ретінде берілуі мүмкін - бұл жағдайда test айнымалысы мен функция арасындағы байланыс үзілуі мүмкін.
Ал func атауы функцияға функцияның ішінде-ақ оған қол жеткізуге болатындай етіп қатты байланысқан.
Функция атауы бар мұндай Function Expression өрнектері атаулы функциялық өрнектер деп аталады.