JavaScript

А зачем нужно присваивать функции переменным

Замечал в примерах такие варианты написания
 const name = function(){} 
Называется такое вроде function expression. Нужно ли оно?
Ф*
Фарид ***
6 773
Разницы никакой, не считая того, что переменные не могут быть вызвать раньше, чем были инициализированы. Воспринимай это, как способ вызвать функцию в минимум строчек кода... используй тогда, когда можно обойтись одним выражением без фигурных скобок... и забудь в данном случае про слово function, пиши просто...
 const func = () => console.log('func'); 
Это и есть основное преимущество, ибо в тех же объектах даже для геттеров такой синтаксис не прокатит и нужно писать полноценный вызов с фигурными скобками и словом return. А это ой как неприятно, когда тебе нужно выполнить конкретную операцию, которая будет именно что выполняться при вызове, а не передавать значение.

Например, на практике использовал конструкцию вида...
 const value = () => localStorage.getItem('item'); 
Если бы было простое присвоение, то значение внутри не обновлялось бы... а если бы была функция с привычным синтаксисом, то было на несколько слов больше. К тому же, конструкцию можно довести до другого состояния.
 (func = () => console.log('func'))(); 
Тогда она еще и вызвана будет, плюс не потеряет собственное имя.
MN
Mahmut Nassyrov
57 206
Лучший ответ
Конкретно этот тип написания функционального выражения (function expression) - не знаю. Принципиальное отличие от объявления функции (function declaration) это то что он не поднимается вверх кода (hoistiong). Какая польза? Да вроде никакая. А то и баг можно оставить, если ты на "хойстинг" полагаешься.
Но функциональными выражениями также являются анонимные и самовзрывающиеся функции.
Вот пример, когда мне требуется выполнить асинхронный код всего 1 раз я использую "анонимное самовзрывающееся функционаяльное выражение" с использованием await оператора:Для моего глаза приятнее чем использовать постоянные then().then() (если ты знаешь что такое промисы)
Или просто анонимное выражение:Но кто-то предпочитает тобою указанное написание. Лично я - нет.
Нужно оно или нет, это зависит от поставленной задачи, если оно не требуется, то можно использовать обычное объявление функции function declaration.

При объектно-ориентированном программировании у объектов есть свойства и методы, присваивая свойству объекта в качестве его значения функцию, это свойство становится методом и это тоже относится к части function expression.

Объявление function expression можно использовать также и для генерации новой функции, например в коде может быть такой код const newFunc = createFunction(); при вызове функции createFunction обработает код функции и вернет новую функцию, которая будет создана с помощью createFunction, новая функции будет присвоена в переменную newFunc, и уже имя newFunc можно будет использовать для вызова этой новой функции, с помощью function declaration такое не сделаешь. Полный код есть на скриншоте

Почитай эту статью https://learn.javascript.ru/function-expressions, там более подробно описывается о разнице между declaration и expression и о том где их можно применять.