Источник: http://learn.javascript.ru/named-function-expression
Обычно то, что называют «именем функции» — на самом деле, является именем переменной, в которую присвоена функция. Если функцию переместить в другую переменную — она сменит «имя». В JavaScript есть способ указать имя, действительно привязанное к функции. Оно называется Named Function Expression (NFE) или, по-русски, именованное функциональное выражение.
Простейший пример NFE выглядит так:
var f = function sayHi(...) { /* тело функции */ };
Имя функционального выражения (sayHi)
имеет особый смысл. Оно доступно только изнутри самой функции.
var f = function sayHi(name) {
alert(sayHi); // изнутри функции - видно (выведет код функции)
};
alert(sayHi); // снаружи - не видно (ошибка: undefined variable 'sayHi')
Ещё одно принципиальное отличие имени от обычной переменной заключается в том, что его нельзя перезаписать.
NFE используется в первую очередь в тех ситуациях, когда функцию нужно передавать в другое место кода или перемещать из одной переменной в другую.
Внутреннее имя позволяет функции надёжно обращаться к самой себе, где бы она ни находилась.