Прежде всего нужно помнить, что функции в JavaScript могут быть двух видов:
- Обычные функции (нормальные, которые оформляются через ключевое слово
function
) - Стрелочные функции (с урезанными возможностями, которые оформляются в виде
()=>1
)
На что это влияет?
В стрелочных функциях не определяются локальные привязки для arguments
, super
, this
, or new.target
.
Для получения имени функции нужно обращаться к объекту arguments:
function vasya(){
return arguments.callee.name
};
Выражение «arguments.callee.name» вернёт нам строку ‘vasya‘.
Видеоролик
Зачем нужно получать имя функции при её вызове?
Предположим у нас имеется функция, которая выполняет полезные действия.
function sumABC (a,b,c){
return a + b + c
};
sumABC(1,2,3);
Её вызов с параметрами вернёт нам число 6.
Но мы в любой момент можем получить её имя и вывести его в консоль.
function sumABC (a,b,c){
console.log(`Вызвана функция ${arguments.callee.name}`);
return a + b + c;
};
sumABC(1,2,3);
Мы делаем это для того, чтобы иметь возможность записать в журнал вызовов, последовательность вызываемых функций. Если вы работаете на серверной стороне и используете для этого NodeJS, тогда в файл будут писаться эти сообщения.
И для этого нам не нужно каждый раз писать «console.log(`Вызвана функция А`)» или «console.log(`Вызвана функция Б`)«.
Мы можем писать общую команду для логирования — «console.log(`Вызвана функция ${arguments.callee.name}`)».
Такой подход позволяет сократить упоминания самой функции в коде. Если бы мы использовали выражение «console.log(`Вызвана функция sumABC()`)«, то в нашем рабочем файле было бы уже три места с таким упоминанием. Если код большой и функция вызывается в разных местах, то это очень неудобно — будешь отвлекаться.
Информационные ссылки
Официальная страница стандарта ECMAScript — https://tc39.es/ecma262/multipage/ — https://tc39.es/ecma262/
Зарезервированные слова в ECMAScript — https://tc39.es/ecma262/multipage/ecmascript-language-lexical-grammar.html#sec-keywords-and-reserved-words