Page 139 - Браун Э. - Изучаем JavaScript. Руководство по созданию современных веб-сайтов - 2017
P. 139
const f = function ( )
1 1 . . .
} ;
Результат такой, как будто мы объявили функцию обычным способом: здесь
имеется идентификатор f, который позволяет обращаться к функции. Как и при
обычном объявлении функции, мы можем вызвать ее, используя синтаксис f ( ) .
Единственное отличие в том, что здесь мы создаем анонимную функцию (используя
функциональное выражение) и присваиваем ее переменной.
Анонимные функции используются все время: как аргументы других функций
или методов либо при создании функциональных свойств в объекте. Мы будем
встречаться с ними повсюду в книге.
Я сказал, что имя функции является необязательным в функциональном выраже
.
.
нии . Так что же происходит, когда мы присваиваем функции имя и присваиваем ее
)
переменной (и для чего это может нам понадобиться ? Рассмотрим пример.
const g = function f ( ) {
1 1 . . .
Когда функция создается таким способом, имя g имеет приоритет, и для обра
щения к функции (извне функции) мы используем имя g; попытка доступа к f при
водит к ошибке неопределенности переменной. С учетом вышесказанного зачем бы
нам это могло понадобиться? Это может быть необходимо, если нужно обратиться
к функции из самой функции (так называемая рекурсия (recursion)).
const g = function f ( stop) {
i f ( s top) console . l o ( ' f остановлена ' ) ;
g
f t ru ) ;
(
e
} ;
g ( f als ) ;
e
В самой функции мы используем f, чтобы сослаться на функцию, а вне мы ис
пользуем g. Нет никакого особенно серьезного основания, чтобы присваивать функ
ции два разных имени, но здесь мы делаем так для пояснения работы именованных
функциональных выражений.
Поскольку объявление функции и функционального выражения выглядят идентич
но, вы могли бы задаться вопросом «Как JavaScript их различает (или есть ли там ка
кое-нибудь различие)?» Оrвет - контекст: если объявление функции используется как
выражение, то это функциональное выражение, а если нет, то это объявление функции.
Различие является главным образом академическим, и вы не должны обычно ду
мать о нем. Определяя именованную функцию, которую вы намереваетесь вызвать
позже, вы, вероятно, будете использовать объявление функции, не думая об этом,
а если необходимо создать функцию для присваивания чему-то или для передачи
в другую функцию, вы будете использовать функциональное выражение.
Функциональные вы р ажения и анонимные функции 1 3 9

