Именувани функционални изрази во 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 со име на функцијата се нарекуваат именувани функционални изрази.