JavaScript | Как получить имя функции из тела функции при её вызове?

JavaScript | Как получить имя функции из тела функции при её вызове?

Прежде всего нужно помнить, что функции в JavaScript могут быть двух видов:

  1. Обычные функции (нормальные, которые оформляются через ключевое слово function)
  2. Стрелочные функции (с урезанными возможностями, которые оформляются в виде ()=>1)

На что это влияет?

В стрелочных функциях не определяются локальные привязки для argumentssuperthis, or new.target.

 

Для получения имени функции нужно обращаться к объекту arguments:

 

function vasya(){

    return arguments.callee.name

};

 

Выражение «arguments.callee.name» вернёт нам строку ‘vasya‘.

Получили имя функции при её вызове - JavaScript
Получили имя функции при её вызове — JavaScript

 

Видеоролик

 

Зачем нужно получать имя функции при её вызове?

Предположим у нас имеется функция, которая выполняет полезные действия.

 

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);

 

 

 

Вывели имя вызванной функции в журнал - JavaScript
Вывели имя вызванной функции в журнал — JavaScript

Мы делаем это для того, чтобы иметь возможность записать в журнал вызовов, последовательность вызываемых функций. Если вы работаете на серверной стороне и используете для этого NodeJS, тогда в файл будут писаться эти сообщения.

И для этого нам не нужно каждый раз писать «console.log(`Вызвана функция А`)» или «console.log(`Вызвана функция Б`)«.

Мы можем писать общую команду для логирования — «console.log(`Вызвана функция ${arguments.callee.name}`)».

 

Такой подход позволяет сократить упоминания самой функции в коде. Если бы мы использовали выражение «console.log(`Вызвана функция sumABC()`)«, то в нашем рабочем файле было бы уже три места с таким упоминанием. Если код большой и функция вызывается в разных местах, то это очень неудобно — будешь отвлекаться.

 

Информационные ссылки

Официальная страница стандарта ECMAScripthttps://tc39.es/ecma262/multipage/https://tc39.es/ecma262/

Зарезервированные слова в ECMAScript https://tc39.es/ecma262/multipage/ecmascript-language-lexical-grammar.html#sec-keywords-and-reserved-words