Именованные функциональные выражения
Специально для работы с рекурсией в JavaScript существует особое расширение функциональных выражений, которое называется «Named Function Expression» (сокращённо NFE) или, по-русски, «именованное функциональное выражение».
Простейший пример NFE выглядит так:
var f = function sayHi(...) { /* тело функции */ };
Имя функционального выражения (sayHi)
имеет особый смысл. Оно доступно только изнутри самой функции.
var f = function sayHi(name) {
console.log(sayHi); // изнутри функции - видно (выведет код функции)
};
console.log(sayHi); // снаружи - не видно (ошибка: undefined variable 'sayHi')
Ещё одно принципиальное отличие имени от обычной переменной заключается в том, что его нельзя перезаписать.
NFE используется в первую очередь в тех ситуациях, когда функцию нужно передавать в другое место кода или перемещать из одной переменной в другую.
Внутреннее имя позволяет функции надёжно обращаться к самой себе, где бы она ни находилась.
Заключение:
- Если функция задана как Function Expression, ей можно дать имя.
- Оно будет доступно только внутри функции (кроме IE8-).
- Это имя предназначено для надёжного рекурсивного вызова функции, даже если она записана в другую переменную.
- Обратим внимание, что с Function Declaration так поступить нельзя. Такое «специальное» внутреннее имя функции задаётся только в синтаксисе Function Expression.