Зачастую в программах требуется рассказать компилятору о функции заранее, не объявляя ее. Возьмем эту простую программу, как пример: Когда вы напишите эту программу у себя. Вероятно, ваш редактор кода так же как и мой, не подчеркнет ошибку ни в одной из строк. Однако, стоит вам попробовать скомпилировать программу, как вы получите следующее: Когда компилятор достиг строки 4. Он просто не смог найти идентификатор (функции) diffrerence. Да, скажете вы, странно, ведь ниже в строке 6 мы определили его? Но все дело в том, что компилируется программа построчно...
Источник: Nuances of Programming Первое отличие: название Если вы создаёте функцию с названием, то вам необходимо объявить функцию. В функциональных выражениях же название не обязательно. Объявление функции: function doStuff() {}; Функциональное выражение: const doStuff = function() {} Анонимные функции (без названия) выглядят в ES6 вот таким образом: const doStuff = () => {} Поднятие Поднятие функций подразумевает то, что мы можем использовать функции в коде до того, как в программе встретится сама функция...