Есть ли случаи, когда это необходимо / полезно, а не оставлять анонимным?
Начиная с ES2015, даже если вы пропустите descriptiveFunctionName
, ваша функция не будет анонимной, она будет иметь имя (talk
). ES2015 добавил выведенные имена функций (и, наконец, свойство name
). Имена выводятся в большинстве ситуаций, с единственным действительно важным местом, где они не выводятся, будучи obj.foo = function() { }
(что оставляет функцию с именем ""
, а не "foo"
).
Отдельно, если функция будет рекурсивной или иным образом ссылается на себя (задается в качестве обработчика событий и т. Д.), Вы можете предпочесть ссылаться на нее по ее имени (которое находится внутри нее).
Итак, причины добавления имени:
- Если вы создаете объект, как показано в вашем вопросе, и вы хотите, чтобы фактическое имя функции не совпадало со свойством, которое вы инициализируете с помощью функции.
- Если вы делаете
obj.foo = function nameHere() { };
и хотите, чтобы у функции было имя, а не ""
.
- Он будет ссылаться на себя, и вы хотите использовать это имя, а не свойство объекта.